powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как передать имя генератора в хранимую процедуру?
13 сообщений из 13, страница 1 из 1
Как передать имя генератора в хранимую процедуру?
    #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
Как передать имя генератора в хранимую процедуру?
    #32059567
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем изюминка то такого подхода. Какая разница вызывать процедуру с именем генератора или просто спросить у этого генератора следующее значение. Количество кода примерно одинаковое.
...
Рейтинг: 0 / 0
Как передать имя генератора в хранимую процедуру?
    #32059575
xyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xyz
Гость
просто в моей базе где то 20 генераторов и для каждого нужно тогда отдельно создавать по отдельной процедуре и коды этих процедур будут отличатся только именем генератора в выражении GEN_ID(<имя генератора>, 1);
...
Рейтинг: 0 / 0
Как передать имя генератора в хранимую процедуру?
    #32059579
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык а зачем это все в процедуры то совать, если можно напрямую в запросе или тем паче в тригере запрашивать. Что ты будешь процу вызывать, что напрямую запросишь - те же яйца только в профиль.
...
Рейтинг: 0 / 0
Как передать имя генератора в хранимую процедуру?
    #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
Как передать имя генератора в хранимую процедуру?
    #32059637
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет. По этому поводу могу посоветовать сделать цепочку из IF ... ELSE IF ...
...
Рейтинг: 0 / 0
Как передать имя генератора в хранимую процедуру?
    #32059648
Привет!
Раз из Дельфи нужно, то вызывай с клиента запрос вида

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

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

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

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


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