2014-09-04 57 views
6

我正在嘗試創建seuqunce觸發器,但是當我執行觸發器時,會在SQL Developer中創建sql時發生錯誤。我不明白,實際上一切都很好。我分享下面的細節,請幫助我,謝謝。創建Oracle序列觸發器

我的觸發SQL:

CREATE OR REPLACE TRIGGER "TRIGGER1" BEFORE INSERT ON ACCOUNTS 
FOR EACH ROW 
WHEN (new."ID" IS NULL) 
BEGIN 
    SELECT ACCOUNTS_SEQ.NEXTVAL 
    INTO :new."ID" 
    FROM dual; 
END; 
/

和錯誤描述:

Error starting at line : 5 in command - 
CREATE OR REPLACE TRIGGER "TRIGGER1" BEFORE INSERT ON ACCOUNTS 
FOR EACH ROW 
WHEN (new."ID" IS NULL) 
BEGIN 
    SELECT ACCOUNTS_SEQ.NEXTVAL 
    INTO :new."ID" 
    FROM dual 
Error report - 
SQL Command: trıgger "TRIGGER1" 
Failed: Warning: completed with warning 

Error starting at line : 12 in command - 
END 
Error report - 
Unknown Command 
+1

擺脫那些雙引號並重新編譯。 – 2014-09-04 08:38:29

+0

'ID'也必須是'ACCOUNTS'表中的實際字段。 – vapcguy 2016-09-21 15:44:41

回答

10

試試以下的方法:

CREATE OR REPLACE TRIGGER TRIGGER1 
BEFORE INSERT ON ACCOUNTS 
FOR EACH ROW 
WHEN (new.ID IS NULL) 
BEGIN 
    SELECT ACCOUNTS_SEQ.NEXTVAL 
    INTO :new.ID 
    FROM dual; 
END; 
/

你的順序應該是這樣的

CREATE OR REPLACE SEQUENCE ACCOUNT_SEQ 
START WITH 1 
INCREMENT BY 1; 

希望它有幫助。

+0

不幸的是,觸發器被創建了,我無法編譯它。錯誤(8,11):PLS-00103:遇到下列其中一項時遇到符號「文件結束」: – user1928388 2014-09-04 08:59:37

+0

現在觸發器的SQL的樣子:CREATE OR REPLACE TRIGGER TRIGGER1 BEFORE INSERT應收 FOR EACH ROW WHEN(new.ID IS NULL) BEGIN SELECT ACCOUNTS_SEQ.NEXTVAL 分爲:new.ID FROM雙 – user1928388 2014-09-04 09:01:34

+2

確保你在塊之後使用'/'。 – 2014-09-04 09:13:52

0
CREATE OR REPLACE TRIGGER TRIGGER1 
BEFORE INSERT ON ACCOUNTS 
FOR EACH ROW 
BEGIN 
IF :new.ID IS NULL THEN 
SELECT ACCOUNTS_SEQ.NEXTVAL 
INTO :new.ID 
FROM dual; 
END IF; 
END;