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
@
可能还有其他方法可以在创建表语句中使用默认子句使用该序列,这将完成相同的事情: