oracle触发器的问题,插入的时候报错

发布于 2022-09-05 10:46:49 字数 590 浏览 18 评论 0

下面是我写的一个简单的触发器,如果插入app_login_log表后只有一条记录,就更新fam_tea_temp表的相同的family_id的type为1,但是现在插入会报错,如下:
ORA-04091: 表 APP_LOGIN_LOG 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "APP_LOGIN_LOG_UP_TEA_JLCENT", line 4
ORA-04088: 触发器 APP_LOGIN_LOG_UP_TEA_JLCENT' 执行过程中出错

CREATE OR REPLACE TRIGGER APP_LOGIN_LOG_up_tea_jlcent
after insert on APP_LOGIN_LOG
for each row
declare
  v_num number; 
begin
  select COUNT(1) into v_num from APP_LOGIN_LOG where user_id=:new.user_id ;
  if v_num=1 then 
    UPDATE fam_tea_temp set type=1 WHERE FAMILY_ID=:new.user_id;
    end if;
end;
/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟柳画桥 2022-09-12 10:46:49

先说技术上的解决不报错的方法
1、在DECLARE区域增加:

   PRAGMA AUTONOMOUS_TRANSACTION;

2、update语句后面,增加commit语句

然后是逻辑上的问题:
使用AUTONOMOUS_TRANSACTION,select语句读取不到当前表插入新的数据,因此判断条件需要修改为:

if v_num=0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文