|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
Имеется следующая хранимая процедура для получения следующего значения генератора из Delphi-программы. set term !!; CREATE PROCEDURE prodauto RETURNS (GENID INTEGER) AS BEGIN GENID = GEN_ID(prodgen, 1); END !! set term ;!! где prodgen-один из генераторов в моей базе. Хотедось бы не писать такую же самую процедуру для каждого генератора базы, а используя одну процедуру передавать ей в качестве параметра имя генератора. Всем кто ответит спасибо большое! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2002, 10:49 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
А в чем изюминка то такого подхода. Какая разница вызывать процедуру с именем генератора или просто спросить у этого генератора следующее значение. Количество кода примерно одинаковое. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2002, 11:19 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
просто в моей базе где то 20 генераторов и для каждого нужно тогда отдельно создавать по отдельной процедуре и коды этих процедур будут отличатся только именем генератора в выражении GEN_ID(<имя генератора>, 1); ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2002, 11:31 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
Дык а зачем это все в процедуры то совать, если можно напрямую в запросе или тем паче в тригере запрашивать. Что ты будешь процу вызывать, что напрямую запросишь - те же яйца только в профиль. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2002, 11:37 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
процедура мне надо для авто инкрементирования поля из проги на делфи. без процедуры например с помощью тригера это не пойдет (эта проблема описана на www.ibase.ru) : "Однако при использовании генератора в триггере возникает проблема на клиентской стороне (например в BDE, используемом в Delphi, C++Builder ...), когда клиентское приложение пытается перечитать только-что вставленную запись. Поскольку триггер меняет значение первичного ключа вставляемой записи, BDE "теряет" такую запись и чаще всего выдает сообщение "Record/Key deleted". Поскольку SQL-сервер не может сообщить клиентскому приложению о новом значении ключевого поля, необходимо сначала запросить уникальное значение с сервера, и только затем использовать его во вставляемой записи. Сделать это можно при помощи хранимой процедуры CREATE PROCEDURE GETNEWCLIENT RETURNS (NID INTEGER) AS BEGIN NID = GEN_ID(NEWCLIENT, 1); END " ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2002, 11:50 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
Привет. По этому поводу могу посоветовать сделать цепочку из IF ... ELSE IF ... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2002, 13:15 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
Привет! Раз из Дельфи нужно, то вызывай с клиента запрос вида SELECT GEN_ID(<gen_name>,1) FROM RDB$Database RDB$Database содержит гаратированно 1 строку - поэтому gen_id выполнится 1 раз и получишь нужное инкрементое значение. Кстати, в FIBPlus этот подход встроен автоматом. WBR, Alexey ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2002, 13:27 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
блин, ну а все же! можно в процедуру передать имя генератора или указатель на него ? какая разница зачем ? можно или нет ? а если да то как именно, а не извращения ввиде увиливания ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2002, 13:45 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
Извращение-это как раз передавать имя генератора, имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2002, 14:18 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
ну есть к примеру 100 таблиц одинаковой структуры, зачем я в их тригерах буду 100 раз описывать одни и те же строчки работы с гениратором, если могу сделать одну процедуры и вызывать ее в нужном месте ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2002, 14:47 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
Правильно сказа Алексей Ковязин, а вот тебе готовая функция function GetNextID(DataSet:TIBClientDataSet;generatorname: String ):integer; begin if DataSet.Active then DataSet.Close; DataSet.CommandText:='SELECT GEN_ID('+generatorname+',1) FROM RDB$Database'; DataSet.Open; result:=DataSet.FieldByName('gen_id').AsInteger; DataSet.Close; end ; внесто TIBClientDataSet можно какой - нибудь другой набор данных использовать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2002, 14:55 |
|
Как передать имя генератора в хранимую процедуру?
|
|||
---|---|---|---|
#18+
как я понял, нельзя написать хранимую процедуру, куда можно передать имя генератра... а жаль :( обращаю внимание на этот прискорбный факт внимание разработчиков Fb,Y ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2002, 10:16 |
|
|
start [/forum/topic.php?fid=40&msg=32073373&tid=1581048]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 145ms |
0 / 0 |