大家有没有遇到复合触发器这种BUG

山林73 2020-05-06 05:53:08
在 BEFORE EACH ROW 中,UPDATE 语句 SET 字段对应的 :new 值为空,
AFTER EACH ROW 中则可以取到 :new 的值。

如:
CREATE OR REPLACE TRIGGER tr_table1_ct
FOR INSERT OR UPDATE OR DELETE ON table1
COMPOUND TRIGGER
BEFORE STATEMENT IS BEGIN END BEFORE STATEMENT;*/
BEFORE EACH ROW IS BEGIN
dbms_output.put_line('BEFORE EACH ROW '
||'/col1:'||:old.col1
||'/col1:'||:new.col1
);
END BEFORE EACH ROW ;
AFTER EACH ROW IS BEGIN
dbms_output.put_line('AFTER EACH ROW'
||'/col1:'||:old.col1
||'/col1:'||:new.col1
);
END AFTER EACH ROW ;
END tr_table1_ct;

UPDATE table1
SET col1 = 'test'
WHERE id = 123
;--这时 BEFORE EACH ROW 中 :new.col1 为空

--如果 UPDATE 不用 col1
UPDATE table1
SET col2 = '222'
WHERE id = 123
;--这时 BEFORE EACH ROW 中 :new.col1 不为空
...全文
253 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
山林73 2020-05-09
  • 打赏
  • 举报
回复
没有其他触发器。 update 改变字段的结果也是 :new 值为空。 insert 表现正常
卖水果的net 2020-05-08
  • 打赏
  • 举报
回复
1、该表是否存在其他的触发器。 2、第一步,你确定是否 执行的是 update? 如果是 insert 才会有这个现象。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧