Есть хранимая процедура:
| Код | SET TERM ^ ;
CREATE PROCEDURE ADD_CALL_TO_OLD_BUFFER ( p_phone char(11), p_counter integer, p_owner char(1), p_user_type char(1), p_op smallint, p_audio smallint = 0, p_to char(20) = '', p_id integer = 0) as begin /* Procedure Text */ if (not exists (select * from t_bufer where CALLBACK_NUMBER=:p_phone)) then begin insert into t_bufer (CALLBACK_NUMBER,CALLBACK_COUNTER,ID_CHANEL,USER_TYPE,TIME_BEGIN,OPERATOR,AUDIO,CALL_NUMBER,ID_USER) values (:p_phone,:p_counter,:p_owner,:p_user_type,CURRENT_TIMESTAMP,:p_op,:p_audio,:p_to,:p_id); end suspend; end^
SET TERM ; ^
|
Она добавляет запись в таблицу T_BUFER:
| Код | CREATE TABLE T_BUFER ( ID_BUFER INTEGER NOT NULL, CALLBACK_NUMBER CHAR(11), CALLBACK_COUNTER INTEGER, ID_CHANEL CHAR(1), USER_TYPE CHAR(1), TIME_BEGIN TIMESTAMP, OPERATOR SMALLINT DEFAULT 0 NOT NULL, AUDIO SMALLINT DEFAULT 0, CALL_NUMBER CHAR(20), ID_USER INTEGER );
|
Надо чтобы она ещё возвращала ID_BUFER записи, которую она добавила, или 0, если ничего не добавила. Как это сделать? Получить этот ID_BUFER надо быстро (внутри одной транзакции) чтобы после добавления этой записи и до получения ID_BUFER, эту запись не мог случайно удалить кто-то другой |