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

请帮助我,它给出了错误

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

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

请给出该错误的解决方案

4

1 回答 1

1

你有两件事在这里发生 -

1) 当“;” 字符是 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 子句的序列来完成同样的事情:

于 2012-11-07T14:17:15.173 回答