Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема выполнения одной хранимой процедуры для разных таблиц [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

Если решишь - свистни :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо