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

下面是我写的一个简单的触发器,如果插入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;
/
阅读 3.9k
1 个回答

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

   PRAGMA AUTONOMOUS_TRANSACTION;

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

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

if v_num=0
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进