Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Делаю 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 ;^


Наверх

Титульная страница Поиск, карта сайта Написать письмо