![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема выполнения одной хранимой процедуры для разных таблиц [Firebird]
Пубертанец © (2004-05-21 15:51:00)Есть хранимая процедура:
CREATE PROCEDURE GETNEWID
RETURNS (
NEWID INTEGER)
AS
begin
NEWID=GEN_ID(GEN_ID_TABLE1,1);
suspend;
end
Я хочу, чтобы эта процедура выполнялась не только для генератора GEN_ID_TABLE1, но и для GEN_ID_TABLE2, GEN_ID_TABLE3 ... GEN_ID_TABLEN. Т.е. передавать в эту процедуру параметр с именем генератора - но как это сделать не знаю.
Пубертанец (2004-05-21 17:47:00) [1]Прокатит.
Спасибо!
Desdechado (2004-05-21 17:19:00) [2]select gen_id( genName, 1 ) from rdb$database
и никаких max!
Пубертанец (2004-05-21 16:43:00) [3]>Desdechado
И как его вызвать из клиента? Если SELECT MAX(ID), затем увеличить значение на 1, то не подойдет - надо увеличить и значение соответствующего генератора
Johnmen (2004-05-21 16:40:00) [4]>Соловьев © (21.05.04 16:22) [5]
ID должен быть объявлен как BIGINT, т.к. значение генератора именно этого типа.
А для поддержания BIGINT нужен 3 диалект...
:)
Desdechado (2004-05-21 16:38:00) [5]ну, дык этот селект можно и на клиенте вызвать, зачем процедуру-то?!
Соловьев (2004-05-21 16:22:00) [6]:)
писал на скору руку
насамом деле так:
EXECUTE STATEMENT 'SELECT GEN_ID('||:NAME_GEN||',1) FROM RDB$DATABASE ' INTO :ID;
Johnmen (2004-05-21 16:20:00) [7]>Соловьев © (21.05.04 15:59) [1]
А что значит у тебя TableName в приведенном контексте?
:)
Пубертанец (2004-05-21 16:11:00) [8]Эту процедуру я вызываю из клиента, чтобы заранее знать, какой будет ID. Если есть другие мысли - подскажи.
Desdechado (2004-05-21 16:06:00) [9]странный подход...
неужели удобнее вызывать процедуру из одной строчки, чем просто сделать gen_id - это же в разы быстрее!
Соловьев (2004-05-21 15:59:00) [10]Я тоже бился над этим
EXECUTE STATEMENT в ФБ 1.5 думал выручит... Но нет не вышло
...
EXECUTE STATEMENT 'SELECT GEN_ID('||:NAME_GEN||',1) FROM RDB$DATABASE ' || TableName INTO :ID;
...
Выдает ошибку, но самое интересное что генератор срабатывает, а ID - NULL
Если решишь - свистни :)