我正在尝试从以下 Plsql 包中获取序列号并更新给定 contractObjId 的行。我有一个 java 程序可以在线程环境中调用它。
多个线程可以同时调用并且具有相同的contractobjId。我的问题是当多个线程调用时它会生成重复的序列号。
请提出解决方案并指出我做错了什么。
CREATE OR REPLACE PACKAGE BODY MANAGE_SEQ_NO IS
PROCEDURE GET_NEXT_SEQ_NUM (contractobjid NUMBER, seqCur IN OUT SITECURTYP) IS
seq_no NUMBER;
seq_value NUMBER;
BEGIN
SELECT x_sequence_no
INTO seq_no
FROM table_contract
WHERE objid = contractObjid
FOR UPDATE;
IF seq_no IS NULL THEN
seq_value := 1;
ELSE
seq_value := seq_no+1;
END IF;
UPDATE table_contract
SET x_sequence_no = seq_value
WHERE objid = contractObjid;
COMMIT;
OPEN seqCur FOR
SELECT seq_value FROM dual;
END GET_NEXT_SEQ_NUM;
END;
/