![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Делаю Insert в хранимой процедуре
sergey32 © (2002-05-22 16:54:00)База Interbase, на поле id стоит генератор.
как мне получить id той записи, которая только что
была добавлена?
Можно получить ее не используя "Select Max(id)"
Fay (2002-05-24 07:22:00) [1]Johnmen , родной ! Что же делать !
Чтобы стало "Да-а...Принципиально верно".
Johnmen (2002-05-23 13:21:00) [2]>...а в процедуре писал insert и сразу же select max(id)
Между твоим "insert" и "сразу же select max(id)" триггер может отработать еще раз или несколько от др.пользователей....
sergey32 (2002-05-23 13:08:00) [3]Я так и делал, в триггер писал new.id=gen_id(MyGen1,1);
а в процедуре писал insert и сразу же select max(id)
Johnmen (2002-05-23 12:22:00) [4]>Deniz © (23.05.02 12:15) : Не-а...Принципиально неверно...
Deniz (2002-05-23 12:15:00) [5]Если немного переделать, то:
set term ^;
create procedure Get_Next_ID
returns (Row_ID integer)
as
begin
Row_ID = gen_id(MyGenerator1, 1);
end
^
set term ;^
И соот-но тригер:
create trigger bi_MyTable for MyTable
before insert
as
begin
if (new.Row_ID is null) then
Row_ID = gen_id(MyGenerator1, 1);
end;
А уже в процедуре вставки (может и на клиенте) пользоваться.
Johnmen (2002-05-23 11:27:00) [6]...добавлю, что ..."Select Max(id)" - в принципе неверно !
sergey32 (2002-05-23 11:09:00) [7]Спасибо за совет!!! Я как-то не додумался.
Fay (2002-05-22 19:37:00) [8]А так низя ?
set term ^;
create procedure sp_MyProc1(StrParam varchar(100))
returns (Row_ID integer)
as
begin
Row_ID = gen_id(MyGenerator1, 1);
insert into MyTable1(Row_ID, StrVal) values (:Row_ID, :StrVal);
end
^
set term ;^