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

查看:97
本文介绍了sql - 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;
/

解决方案

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

   PRAGMA AUTONOMOUS_TRANSACTION;

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

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

if v_num=0

这篇关于sql - oracle触发器的问题,插入的时候报错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆