一个意外的标记“创建触发器

时间:2012-11-07 09:26:00

标签: db2

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

请帮我解决错误

  

意外的标记“CREATE TRIGGER TRG_EFMREFNO
         “BEFOR”是在“BEGIN-OF-STATEMENT”之后发现的。预期的令牌可能包括:“<revoke>”.. SQLCODE = -104,SQLSTATE = 42601,DRIVER = 4.12.79

     

在“END”之后发现意外的标记“END-OF-STATEMENT”。预期的令牌可能包括:“JOIN <joined_table>”.. SQLCODE = -104,SQLSTATE = 42601,DRIVER = 4.12.79

请提供该错误的解决方案

1 个答案:

答案 0 :(得分:1)

这里有两件事 -

1)当“;” character是SQL语句的一部分,必须使用不同的字符来终止语句。我通常使用“@”。要告诉“db2”命令您选择了不同的字符,请使用

db2 -td@

或者如果你想从文件中读取

db2 -td@ -f <somefile>

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

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
@

可能还有其他方法可以在create table语句中使用带有default子句的序列来完成同样的事情: