【问题标题】:An unexpected token "CREATE TRIGGER意外的令牌“CREATE TRIGGER
【发布时间】:2025-12-26 19:45:15
【问题描述】:
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

请给出该错误的解决方案

【问题讨论】:

  • 不,我直接使用trigeer。实际上我将为我的项目创建数据库。你能为我提供任何解决方案吗?请帮忙。我的所有工作都依赖于此。

标签: db2


【解决方案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 子句的序列来完成同样的事情:

【讨论】:

  • 嘿,它不工作在它也不允许在 END 结尾的 A ??
  • 请解决我的问题这个解决方案不是 wrkng..... 你能为那个 Q 提出任何解决方案吗????
  • 我不完全确定你在问什么。我确实创建了表和序列,并测试了语句。您如何运行创建触发器语句 - 使用“db2”命令或“控制中心”等 GUI 工具之一。不幸的是,我无法在这里提供有关 UML 的课程,但我可以尝试回答特定于 DB2 的问题和一般的 SQL 问题。我看不到您的图表中有什么,也不知道您的数据库中有哪些表。请记住,我不为 IBM 工作,但我是一名私人 DB2 顾问,周日早上 6:00 在星巴克阅读他的电子邮件。
  • 我想到了控制中心 - 您可以在窗口底部设置行终止字符。在这张照片中,看到“;”在窗口底部 - 将其更改为“@”。这相当于命令行版本的“db2 -td@”语法。 ibm.com/developerworks/data/library/techarticle/dm-0603saracco2/…