【问题标题】:DB2 Trigger before insert插入前的 DB2 触发器
【发布时间】:2018-10-13 14:42:30
【问题描述】:

插入前的 DB2 触发器无法删除表中的行

CREATE TRIGGER WDW.user_name_search_del
before INSERT ON WDW.user_name_search_b
REFERENCING NEW AS new
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
Delete from wdw.user_name_search_b
where user_name = new.user_name ;--

它正在抛出错误

在“name = new.user_name”之后发现了一个意外的标记“END-OF-STATEMENT”。预期的标记可能包括:“”.. SQLCODE=-104,SQLSTATE=42601,DRIVER=4.9.78 SQL 代码:-104,SQL 状态:42601

【问题讨论】:

标签: db2 database-trigger


【解决方案1】:

需要解决的两件事:

  1. 将“BEGIN ATOMIC”更改为“BEGIN”。 “BEGIN ATOMIC”块不支持 DELETE
  2. 在“;--”之前添加“;END”以结束“BEGIN”块。

声明应该是:

CREATE TRIGGER WDW.user_name_search_del 
  before INSERT ON WDW.user_name_search_b 
  REFERENCING NEW AS new 
  FOR EACH ROW 
  MODE DB2SQL 
BEGIN  
  Delete 
  from wdw.user_name_search_b 
  where user_name = new.user_name; 
END;

【讨论】:

  • 谢谢,但是当我尝试它时抛出以下错误在“ROW MODE DB2SQL”之后发现了意外的令牌“BEGIN Delete”。预期的标记可能包括:“”.. SQLCODE=-104,SQLSTATE=42601,DRIVER=4.9.78 SQL 代码:-104,SQL 状态:42601
  • 将语句末尾的语句分隔符从“;”更改为,比如说,“@”,并在用于运行此语句的工具中指定相同的语句分隔符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多