关于trigger的muting table异常
研究方法:为测试表建立 insert,delete,update 对应的after,before触发器,在触发器中访问当前表,然后执行测试的 insert,delete,update 语句触发这个触发器, 查看是否有异常:
ORA-04091: table YC.TR1 is mutating, trigger/function may not see it
1. 建表,并插入测试数据
create table tr1
(id number,name varchar2(10));
insert into tr1 values(1,'a');
2.建立触发器并执行测试
create or replace trigger tr1_bu
before update on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id = 1;
end;
-- 执行
update tr1 set name='b' -- 报错
drop trigger tr1_bu;
create or replace trigger tr1_au
after update on tr1 for each row
declare
se number;
begin
select id into se from tr1 where id =1;
end;
--执行
update tr1 set name = 'b' where id = 1 --报错
create or replace trigger tr1_ai
after insert on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id = 1;
end;
--执行
insert into tr1 values(2,'b'); --报错
create or replace trigger tr1_bi
before insert on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id = 1;
end;
--执行
insert into tr1 values(2,'b'); --成功
insert into tr1
select 1,'a' from dual -- 报错
create or replace trigger tr1_ad
after delete on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id = 1;
end;
--执行
delete from tr1 where id = 2 --报错
drop trigger tr1_ad;
create or replace trigger tr1_bd
before delete on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id =1;
end;
--执行
delete from tr1 where id = 2 --报错
总结: 只有在before insert触发器中才能编写访问当前表数据的sql语句,但是前提是用普通insert语句触发这个触发器,否则如果用insert select 来触发这个触发器,就会出错
关于trigger的muting table异常相关推荐
- Oracle Study之--Oracle触发器(Trigger)
本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...
- java异常 字节码,Java字节码角度分析异常处理
目录 从字节码角度来分析:异常处理 1.1 异常-catch // 从字节码角度来分析:异常处理 public class T13_ByteAnalyseException { public stat ...
- 数据库CREATE TRIGGER 触发器
CREATE TRIGGER 创建触发器,触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行.Microsoft® SQL Server™ 允许为任何给定的 INSERT ...
- SQL之trigger触发器
触发器是一种数据库对象,一般与一个表相关联,当对该表做出某种修改操作(INSERT.DELETE.UPDATE)时,它会自动地予以执行.触发器可以查询其它表,并可以包含复杂的SQL(或Transact ...
- 第三十九章 SQL命令 DROP TRIGGER
文章目录 第三十九章 SQL命令 DROP TRIGGER 大纲 参数 描述 FROM 子句 示例 第三十九章 SQL命令 DROP TRIGGER 删除触发器 大纲 DROP TRIGGER nam ...
- 第二十一章 SQL命令 CREATE TRIGGER(一)
文章目录 第二十一章 SQL命令 CREATE TRIGGER(一) 大纲 参数 描述 权限和锁 定义触发器的其他方式 参数 trigname event ORDER REFERENCING acti ...
- SQL Server 最佳实践分析器使用小结
Best Practices Analyzer Tool for Microsoft SQL Server 2000是Microsoft SQL Server开发团队开发的一个数据库管理工具,可以让你 ...
- [转]SQLServer和Oracle,存储过程区别,常用函数对比
本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html 以前一直用sqlserver,只有很少的一点oracle的经验,现在要 ...
- ORACLE触发器具体解释
ORACLE PL/SQL编程之八: 把触发器说透 本篇主要内容例如以下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 ...
最新文章
- ASP.NET Core 数据保护(Data Protection)【中】
- 如何做出受欢迎的字体排版风格?
- 史上最快的拼接字串方法
- Uipath 学习栏目基础教学:2Uipath变量介绍
- 软件稳定性测试的测试点
- 包含html语言的超链接标记的网页_零基础入门 HTML 的 8 分钟极简教程
- java 及时释放内存_JMM(一):初识Java内存模型
- JavaScript获取select下拉框中的第一个值
- linux运行欧陆风云,Arm linux启动分析(1)
- 计算机职业素养论文1500字,【如何提高职业素养1500字】_个人职业素养提升计划1500字范文...
- 微信小程序样式padding理解
- 安卓火狐浏览器wifi远程调试没有扫描二维码应用的问题
- 【图像识别】基于计算机视觉实现自动报靶系统(重弹孔)含Matlab源码
- Pod进程内存缓存分析
- Arduino人体红外模块控制
- 基于uni-app手机端后台管理系统uni-uadmin
- STC51单片机学习笔记1——看门狗程序测试
- 精准化测试之:jacoco实现增量代码覆盖率统计
- mysql 5.7 安装配置教程(windows 64位)
- 本科数学专业基础类课程
热门文章
- oracle11g 客户端字符集,查看 Oracle11g 的字符集
- b2g process 和nuwa process 通信
- 基于C#的快递物流管理系统#毕业设计
- python和anaconda安装顺序_Anaconda详细安装步骤图文教程
- 蓝底寸照该如何在手机上修改照片底色
- HDU 3265 - Posters
- 游戏脚本用什么语言写_为什么要写分镜头脚本?
- poi解析不固定列excel
- 印象笔记服务器自动备份,印象笔记跨平台自动备份短信图文教程
- 基于Paddle复现《Neighbor2Neighbor: Self-Supervised Denoising from Single Noisy Images》降噪网络