意外的令牌"创建触发器


CREATE TRIGGER TRG_EFMREFNO 
   BEFORE 
   INSERT ON FEEDBACK_CASE_TB 
   FOR EACH ROW 
   BEGIN 
   SELECT SEQ_EFMREFNO.NEXTVAL INTO:NEW.EFMREFNO FROM DUAL;
   END;

请帮助我这是错误

意外的令牌"创建触发trg_efmrefno
在"开始"下发现" befor"。预期的令牌可能包括:" <revoke>" .. sqlcode = -104,sqlstate = 42601,驱动程序= 4.12.79

在"结束"之后发现了一个意外的令牌"结束"。预期令牌可能包括:"加入<joined_table>" .. sqlcode = -104,sqlstate = 42601,驱动程序= 4.12.79

请给出该错误的解决方案

您在这里有2件事 -

1)当";字符是SQL语句的一部分,有必要使用其他字符终止语句。我通常使用"@"。要告诉" DB2"命令您选择了一个不同的字符,请使用

db2 -td@

或者要从文件中阅读

db2 -td@ -f <somefile>

2)在触发器中更新新行的正确方法是为新行设置一个别名,并使用设置子句:

CREATE TRIGGER TRG_EFMREFNO 
   BEFORE 
   INSERT ON FEEDBACK_CASE_TB 
   REFERENCING NEW AS N
   FOR EACH ROW 
   BEGIN 
       SET N.EFMREFNO = SEQ_EFMREFNO.NEXTVAL;
   END
@

可能还有其他方法可以在创建表语句中使用默认子句使用该序列,这将完成相同的事情:

最新更新