Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Проблема выполнения одной хранимой процедуры для разных таблиц   Найти похожие ветки 

 
Пубертанец   (2004-05-21 15:51) [0]

Есть хранимая процедура:

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 15:59) [1]

Я тоже бился над этим
EXECUTE STATEMENT в ФБ 1.5 думал выручит... Но нет не вышло
...
EXECUTE STATEMENT "SELECT GEN_ID("||:NAME_GEN||",1) FROM RDB$DATABASE " || TableName INTO :ID;
...
Выдает ошибку, но самое интересное что генератор срабатывает, а ID - NULL

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


 
Desdechado ©   (2004-05-21 16:06) [2]

странный подход...
неужели удобнее вызывать процедуру из одной строчки, чем просто сделать gen_id - это же в разы быстрее!


 
Пубертанец   (2004-05-21 16:11) [3]

Эту процедуру я вызываю из клиента, чтобы заранее знать, какой будет ID. Если есть другие мысли - подскажи.


 
Johnmen ©   (2004-05-21 16:20) [4]

>Соловьев ©   (21.05.04 15:59) [1]

А что значит у тебя TableName в приведенном контексте?
:)


 
Соловьев ©   (2004-05-21 16:22) [5]

:)
писал на скору руку
насамом деле так:
EXECUTE STATEMENT "SELECT GEN_ID("||:NAME_GEN||",1) FROM RDB$DATABASE " INTO :ID;


 
Desdechado ©   (2004-05-21 16:38) [6]

ну, дык этот селект можно и на клиенте вызвать, зачем процедуру-то?!


 
Johnmen ©   (2004-05-21 16:40) [7]

>Соловьев ©   (21.05.04 16:22) [5]

ID должен быть объявлен как BIGINT, т.к. значение генератора именно этого типа.
А для поддержания BIGINT нужен 3 диалект...
:)


 
Пубертанец   (2004-05-21 16:43) [8]

>Desdechado
И как его вызвать из клиента? Если SELECT MAX(ID), затем увеличить значение на 1, то не подойдет - надо увеличить и значение соответствующего генератора


 
Desdechado ©   (2004-05-21 17:19) [9]

select gen_id( genName, 1 ) from rdb$database
и никаких max!


 
Пубертанец   (2004-05-21 17:47) [10]

Прокатит.

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-1085994460
Zolboch
2004-05-31 13:07
2004.06.13
Сайты Упражнений


14-1085519359
Thor
2004-05-26 01:09
2004.06.13
X Files - чем дело закончилось?


3-1084954827
Адмирал
2004-05-19 12:20
2004.06.13
Как узнать владельца БД из приложения? (InterBase/FireBird)


1-1086244146
Vlad Oshin
2004-06-03 10:29
2004.06.13
Какое время указывается в TSearchRec? создания? посл. обращения?


3-1084813754
loser
2004-05-17 21:09
2004.06.13
Что такое index is out of date