我对Oracle不太熟悉,但我已经为我的应用程序编写了一个触发器,用于使用序列为记录生成编号。我遇到的问题是,数字可能已经在使用中,我想添加一个检查以确保数字是否已被使用,以选择序列中可用的下一个数字。这可以先做,如果是这样,任何帮助都会非常感激吗?
DROP TRIGGER COMPLAIN_TRG_ENQUIRYNO;
CREATE OR REPLACE TRIGGER COMPLAIN_TRG_ENQUIRYNO
BEFORE INSERT
ON COMPLAIN REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
l_enquiry_no_end complain.enquiry_no_end%TYPE;
BEGIN
SELECT seq_enquiryno.NEXTVAL INTO l_enquiry_no_end FROM dual;
IF :NEW.ENQUIRY_NO_END = ' ' THEN
:NEW.ENQUIRY_NO_END := l_enquiry_no_end;
END IF;
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END ;
答案 0 :(得分:0)
如果列中存在(数字)数据,请不要使用序列,因为这可能导致重复。从空开始并使用序列,或者如果你真的被卡住,找到你拥有的最大pk并重置序列的startswith属性。
或者你可以使用guids而不是guids,它们总是具有全局唯一性 - 在你的触发器中调用sys_guid()函数。它们可能会导致索引等其他问题。