sql - oracle触发器的问题,插入的时候报错
本文介绍了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屋!
查看全文