Вы можете сделать это:
select max(third_party_id) + 1 into thirdPartyId from third_party_user_temp;
Это может привести к конфликтным ситуациям, если два человека могут запустить его одновременно - оба могут получить один и тот же новый thirdPartyId
. Вы можете посмотреть на последовательности, чтобы избежать этого.
Если вы определите последовательность с именем, скажем,
thirdPartyIdSeq
, вы можете сделать это:
PROCEDURE usp_insert_user( userType VARCHAR2,
logonId VARCHAR2,
title VARCHAR2,
firstName VARCHAR2,
middleName VARCHAR2,
lastName VARCHAR2,
comments VARCHAR2,
thirdPartyId OUT number) AS
begin
insert into THIRD_PARTY_USER_TEMP
(Third_party_id,web_logon_id,prsn_type_cd,prsn_title_nm,
prsn_first_nm,prsn_mdl_nm,prsn_last_nm,addtnl_third_party_txt)
VALUES(third_party_id_seq.nextval,logonId,upper(userType),title,
firstName,middleName,lastName,comments)
returning third_party_id into thirdPartyId;
end usp_insert_user;
Используется последовательность для генерации следующего идентификатора, а предложение returning
заполняет ваш параметр OUT.
Вы также можете избежать процедуры и выполнить генерацию идентификатора в триггере, снова используя последовательность. Существует множество примеров такого подхода, не в последнюю очередь на этом сайте.
CREATE OR REPLACE TRIGGER third_party_user_temp_bi
BEFORE INSERT ON third_party_user_temp
FOR EACH ROW
BEGIN
SELECT thirdPartyIdSeq.NEXTVAL
INTO :new.third_party_id
FROM dual;
END;
/
Ваша вставка не требует указания идентификатора, который будет использоваться.