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
请提供该错误的解决方案
答案 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子句的序列来完成同样的事情: