问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Oracle变异表触发器中ORA-04091错误原因及解决方案

发布网友 发布时间:2024-10-01 18:21

我来回答

1个回答

热心网友 时间:2024-10-18 16:28

Oracle变异表触发器中ORA-04091错误原因及解决方案
变异表是指激发触发器的DML语句所操作的表
当对一个表创建行级触发器时,有下列两条*:
1.不能读取或修改任何触发语句的变异表;
2.不能读取或修改触发表的一个约束表的PRIMARY KEY,UNIQUE 或FOREIGN KEY关键字的列, 但可以修改其他列
例如:有这样一个需求:在更新员工所在部门或向部门插入新员工时,部门中员工人数不超过7人
如果按照下面的触发器写就会使UPDATE操作时报错
CREATE OR REPLACE TRIGGER updatetrigger
BEFORE UPDATE ON EMP
FOR EACH ROW
DECLARE
v_num NUMBER;
BEGIN
SELECT count(*) INTO v_num FROM emp
WHERE deptno = :new.deptno;
IF (v_num >7) THEN
RAISE_APPLICATION_ERROR(-20001,
'员工数多于'||v_num);
END IF;
END updatetrigger;
ORA-04091: 表 SCOTT.EMP 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "SCOTT.UPDATETRIGGER", line 4
ORA-04088: 触发器 'SCOTT.UPDATETRIGGER' 执行过程中出错
如果既想更新变异表,同时又需要查询变异表,那么如何处理呢?
将行级触发器与语句级触发器结合起来,在行级触发器中获取要修改的记录的信息,存放到一个软件包的全局变量中,然后在语句级后触发器中利用软件包中全局变量信息对变异表的查询,并根据查询的结果进行业务处理
例如:
为了实现在更新员工所在部门或向部门插入新员工时,部门中员工人数不超过7人,可以在emp表上创建两个触发器,同时创建一个共享信息的包
CREATE OR REPLACE PACKAGE mutate_pkg
AS
v_deptno NUMBER(2);
END;
CREATE OR REPLACE TRIGGER rmutate_trigger
BEFORE INSERT OR UPDATE OF deptno ON EMP
FOR EACH ROW
BEGIN
mutate_pkg.v_deptno:=:new.deptno;
END;
CREATE OR REPLACE TRIGGER smutate_trigger
AFTER INSERT OR UPDATE OF deptno ON EMP
DECLARE
v_num number(3);
BEGIN
SELECT count(*) INTO v_num FROM emp
WHERE deptno = mutate_pkg.v_deptno;
IF v_num>7 THEN
RAISE_APPLICATION_ERROR(-20003,'这部门的员工太多了 '||
mutate_pkg.v_deptno);
END IF;
END;
这样操作,就不会报ORA-04091: 表SCOTT.EMP 发生了变化,触发器/函数不能读它错误了。
Oracle变异表触发器中ORA-04091错误原因及解决方案

1.不能读取或修改任何触发语句的变异表;2.不能读取或修改触发表的一个约束表的PRIMARY KEY,UNIQUE 或FOREIGN KEY关键字的列, 但可以修改其他列 例如:有这样一个需求:在更新员工所在部门或向部门插入新员工时,部门中员工人数不超过7人 如果按照下面的触发器写就会使UPDATE操作时报错 CREATE OR REPL...

Load Port、SMIF

威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...

触发器ORA-04091错误,怎样解决

1.不能读取或修改任何触发语句的变异表;2.不能读取或修改触发表的一个约束表的PRIMARY KEY,UNIQUE 或FOREIGN KEY关键字的列, 但可以修改其他列 例如:有这样一个需求:在更新员工所在部门或向部门插入新员工时,部门中员工人数不超过7人 如果按照下面的触发器写就会使UPDATE操作时报错 CREATE OR RE...

基本触发器原理 什么是触发器 基本触发器 t’触发器 双稳态触发器 触发器的特点 触发器分类 边沿触发器 单稳态触发器
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在家中练体力没有健身器材 Sarah Connor中文名是什么?Wait' Til U he是什么歌? 全民奇迹2埋骨沙漠探索任务攻略 埋骨沙漠探索景点在哪-新手攻略-安族... 春风不问路分集剧情 全民奇迹2埋骨沙漠探索任务攻略介绍_全民奇迹2埋骨沙漠探索任务攻略是... 全民奇迹2说谎者任务怎么完成 隐藏说谎者任务攻略 有什么动漫网站吗,可以下载的,别说风车动漫,我觉得不行,我目前在... 无线本与台式电脑连接不同路由,如何共享台式机上的打印机。 十几间办公室如何实现无线宽带网络 ...用一个无线路由器能带多个AP嘛?说说主要用到的设备,和方法!_百度... 1马力等于多少W? 马力和瓦特怎么换算呢? 苏州市高科百年工贸有限公司怎么样? 湖南亮百年不锈钢制品有限公司怎么样? 分手多久后就不会复合了,分手过后复合率80% 和平精英怎么重新实名认证 和平精英怎么重置身份证 产后掉头发掉的厉害,怎么改善呀? 产后妈妈掉头发很厉害怎么办? 产后掉头发正常吗?有什么方法可以缓解? ...找到厕所后我就开始小便,小便完后我才发现自己尿床了.这是... 台式机连接上WiFi后不能上网 台式电脑能连接wifi网页打不开上不了网 WiFi能连接上,但是台式机网页打不开!扣扣不能上!本地连接显示已连接!重 ... 长沙到凤凰旅游,火车方便还是汽车方便,长沙有直达的车吗?在线等!_百 ... 周末从长沙出发是先去梵净山还是亚木沟合理? T5支架灯识别 T5支架灯概述 看电视有什么坏处呢???<与众不同哦> 求好玩点的小游戏O_O 北川擂鼓八一中学七年级期末考试成绩单 ...电视连接wifi时,显示无法自动获取ip地址,请问手动设置ip地址该... 求一款手机软件。能在桌面壁纸上提前几天显示,下一个待办事项。现在我用... 大话西游2被禁言了怎么办?第一次.是不是能交罚款啊到那里交? 大话西游2中第一次被禁言需要罚金么? 大话西游2封号怎么办? 大话刷屏玩着 结果给封了 说法恶意非法语言 该怎 ... 大话西游2 第一次被禁言不去找殷丞相时间长了会自己解除吗? 胆在人体的什么位置 正常人的胆大小是多少 胆囊形状正常,67*14MM正常吗 梦见走失很多年不知生死的叔叔 三千元能组装出什么样的家用电脑配置? 30g的流量是什么概念 魔兽世界走流量问题 草莓长不大就红了原因 草莓长不大就红了 为什么我的打印机设置为双面打印却打印出单面? 电脑打印时出现“内存不足,请关闭其他文件”怎么办? 最适合种植的蜜源植物有哪些? 中考会有开卷考的科目吗? 中考政治历史是开卷吗?