Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как передать имя генератора в хранимую процедуру? / 13 сообщений из 13, страница 1 из 1
18.10.2002, 10:49
    #32059536
xyz
xyz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
Имеется следующая хранимая процедура для получения следующего значения генератора из Delphi-программы.
set term !!;
CREATE PROCEDURE prodauto
RETURNS (GENID INTEGER)
AS
BEGIN
GENID = GEN_ID(prodgen, 1);
END !!
set term ;!!
где prodgen-один из генераторов в моей базе. Хотедось бы не писать такую же самую процедуру для каждого генератора базы, а используя одну процедуру передавать ей в качестве параметра имя генератора. Всем кто ответит спасибо большое!
...
Рейтинг: 0 / 0
18.10.2002, 11:19
    #32059567
Серега
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
А в чем изюминка то такого подхода. Какая разница вызывать процедуру с именем генератора или просто спросить у этого генератора следующее значение. Количество кода примерно одинаковое.
...
Рейтинг: 0 / 0
18.10.2002, 11:31
    #32059575
xyz
xyz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
просто в моей базе где то 20 генераторов и для каждого нужно тогда отдельно создавать по отдельной процедуре и коды этих процедур будут отличатся только именем генератора в выражении GEN_ID(<имя генератора>, 1);
...
Рейтинг: 0 / 0
18.10.2002, 11:37
    #32059579
Серега
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
Дык а зачем это все в процедуры то совать, если можно напрямую в запросе или тем паче в тригере запрашивать. Что ты будешь процу вызывать, что напрямую запросишь - те же яйца только в профиль.
...
Рейтинг: 0 / 0
18.10.2002, 11:50
    #32059585
xyz
xyz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
процедура мне надо для авто инкрементирования поля из проги на делфи. без процедуры например с помощью тригера это не пойдет (эта проблема описана на 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 "
...
Рейтинг: 0 / 0
18.10.2002, 13:15
    #32059637
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
Привет. По этому поводу могу посоветовать сделать цепочку из IF ... ELSE IF ...
...
Рейтинг: 0 / 0
18.10.2002, 13:27
    #32059648
Как передать имя генератора в хранимую процедуру?
Привет!
Раз из Дельфи нужно, то вызывай с клиента запрос вида

SELECT GEN_ID(<gen_name>,1) FROM RDB$Database

RDB$Database содержит гаратированно 1 строку - поэтому gen_id выполнится 1 раз и получишь нужное инкрементое значение.

Кстати, в FIBPlus этот подход встроен автоматом.

WBR,
Alexey
...
Рейтинг: 0 / 0
28.11.2002, 13:45
    #32073373
oss
oss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
блин, ну а все же!
можно в процедуру передать имя генератора или указатель на него ?
какая разница зачем ?
можно или нет ?
а если да то как именно, а не извращения ввиде увиливания
...
Рейтинг: 0 / 0
28.11.2002, 14:18
    #32073400
_none_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
Извращение-это как раз передавать имя генератора, имхо.
...
Рейтинг: 0 / 0
28.11.2002, 14:47
    #32073427
oss
oss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
ну есть к примеру 100 таблиц одинаковой структуры,
зачем я в их тригерах буду 100 раз описывать одни и те же строчки работы с гениратором, если могу сделать одну процедуры и вызывать ее в нужном месте ?
...
Рейтинг: 0 / 0
28.11.2002, 14:55
    #32073436
denipod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
Правильно сказа Алексей Ковязин, а вот
тебе готовая функция

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 можно какой - нибудь другой набор данных использовать
...
Рейтинг: 0 / 0
29.11.2002, 10:16
    #32073830
oss
oss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
как я понял, нельзя написать хранимую процедуру, куда можно передать имя генератра... а жаль :(
обращаю внимание на этот прискорбный факт внимание разработчиков Fb,Y
...
Рейтинг: 0 / 0
29.11.2002, 13:04
    #32074027
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать имя генератора в хранимую процедуру?
это нельзя, потому что среди разработчиков Fb & Y (и не только) нет таких извращенцев (не буду показывать пальцем)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как передать имя генератора в хранимую процедуру? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]