2014-09-04 56 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;