Oracle序列触发器

时间:2015-01-06 14:53:47

标签: oracle plsql triggers sequence

我对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 ;

1 个答案:

答案 0 :(得分:0)

如果列中存在(数字)数据,请不要使用序列,因为这可能导致重复。从空开始并使用序列,或者如果你真的被卡住,找到你拥有的最大pk并重置序列的startswith属性。

或者你可以使用guids而不是guids,它们总是具有全局唯一性 - 在你的触发器中调用sys_guid()函数。它们可能会导致索引等其他问题。