Текущий архив: 2002.06.17;
Скачать: CL | DM;
ВнизДелаю Insert в хранимой процедуре Найти похожие ветки
← →
sergey32 (2002-05-22 16:54) [0]База Interbase, на поле id стоит генератор.
как мне получить id той записи, которая только что
была добавлена?
Можно получить ее не используя "Select Max(id)"
← →
Fay (2002-05-22 19:37) [1]А так низя ?
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 ;^
← →
sergey32 (2002-05-23 11:09) [2]Спасибо за совет!!! Я как-то не додумался.
← →
Johnmen (2002-05-23 11:27) [3]...добавлю, что ..."Select Max(id)" - в принципе неверно !
← →
Deniz (2002-05-23 12:15) [4]Если немного переделать, то:
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 12:22) [5]>Deniz © (23.05.02 12:15) : Не-а...Принципиально неверно...
← →
sergey32 (2002-05-23 13:08) [6]Я так и делал, в триггер писал new.id=gen_id(MyGen1,1);
а в процедуре писал insert и сразу же select max(id)
← →
Johnmen (2002-05-23 13:21) [7]>...а в процедуре писал insert и сразу же select max(id)
Между твоим "insert" и "сразу же select max(id)" триггер может отработать еще раз или несколько от др.пользователей....
← →
Fay (2002-05-24 07:22) [8]Johnmen , родной ! Что же делать !
Чтобы стало "Да-а...Принципиально верно".
Страницы: 1 вся ветка
Текущий архив: 2002.06.17;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.005 c