发生了变化 触发器函数不能读它_2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
1、异常出现的场景.
:在使用Hibernate做为项目持久层的情况下,需要对某一张表进行一个扩展,扩展操作便是在该表上创建一个触发器。将表中的数据读入到其他表中。
SQL语句如下:
drop table tr_table;
create table tr_table( --触发器作用表
tab_id number primary key,
tab_name varchar2(30) NOT NULL
)
create table ts_table as select * from tr_table; --提供扩展功能的表
--定义的触发器,在tr_table表插入和更新数据之后向ts_table表插入当前操作的信息行。
create trigger iu_table
after insert or update on tr_table
for each row
begin
insert into ts_table select * from tr_table t where t.tab_id = :new.tab_id;
end is_table;
--对tr_table执行插入操作,触发ts_table插入操作
insert into tr_table(tab_id,tab_name) values(1,'test');
--弹出错误信息提示
--ORA-04091:表tr_table发生了变化 触发器/函数不能读它
--ORA-06512: 在iu_table line 2
--ORA-04088: 触发器iu_table 执行过程中出错
2、问题分析
:在Oracle中执行DML语句的时候是需要显示进行提交操作的。当我们进行插入的时候,会触发触发器执行对触发器作用表和扩展表的种种操作,但是这个时候触发器和插入语句是在同一个事务管理中的,因此在插入语句没有被提交的情况下,我们无法对触发器作用表进行其他额外的操作。如果执行其他额外的操作则会抛出如上异常信息。
3、解决方案
:1,我们知道,出错的原因是因为触发器和DML语句在同一事务管理中,所以方案一便是将触发器和DML语句分成两个单独的事务处理。这里可以使用Pragma autonomous_transaction; 告诉Oracle触发器是自定义事务处理。
SQL语句如下:
create trigger iu_table
after insert or update on tr_table
for each row
declare --这里是关键的地方,在变量申明的地方,指定自定义事务处理。
pragma autonomous_transaction;
begin
insert into ts_table select * from tr_table t where t.tab_id = :new.tab_id;
--这里需要显示提交事务
commit;
end iu_table;
:2,在Oracle Trigger中有:new,:old两个特殊变量,当触发器为行级触发器的时候,触发器就会提供new和old两个保存临时行数据的特殊变量,我们可以从俩个特殊的变量中取出数据执行扩张表的DML操作。
SQL语句如下:
create trigger iu_table
after insert on tr_table
for each row
begin
insert into ts_table(tab_id,tab_name) values(:new.tab_id,:new.tab_name);
--这里需要注意,要知道不同的触发类型其特殊变量:new和:old保存的值的区别。
--commit; 注意使用方案二,这里不能显示的进行提交操作操作,trigger中在没有声明自定义事务管理的时候,不能执行显示提交。
end iu_table;
如果您觉得文章有用,也可以给水发个微信小额红包鼓励鼓励!!!
发生了变化 触发器函数不能读它_2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...相关推荐
- 2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
1.异常出现的场景. :在使用Hibernate做为项目持久层的情况下,需要对某一张表进行一个扩展,扩展操作便是在该表上创建一个触发器.将表中的数据读入到其他表中. SQL语句如下: drop tab ...
- Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化
Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化 目录 利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化 Bar( ...
- 8月20日全球六大国际域名解析量变化情况统计报告
IDC评述网(idcps.com)08月24日报道:根据DailyChanges公布的实时数据显示,在2015年8月20日,全球六大国际域名解析量总量持续增至153,722,200个,环比上期,净增1 ...
- 12月18日云栖精选夜读 | Java 中创建对象的 5 种方式!...
作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...
- [悦读简报] 2021年1月5日,星期二,农历十一月二十二
公众号:悦读简报 国内热点 1.饿了么一外卖员遭保安棍打后死亡,其妻子:元旦跑80多单说这个月能挣一万 2.超越马云马化腾直逼巴菲特,农夫山泉钟睒睒成全球第八大富豪 3.元旦期间电影总票房约13亿元, ...
- c语言每轮for循环初始化i,十三.Linux博客-2016年8月18日while、for特殊用法、selet循环与菜单、函数...
格式说明: 操作 概念 命令 说明及举例 十三.while.for特殊用法.selet循环与菜单.函数 while特殊用法 while循环的特殊用法(遍历文件的每一行): while read lin ...
- 4月18日云栖精选夜读 | 阿里靠什么支撑 EB 级计算力?
[点击订阅云栖夜读周刊] MaxCompute 是阿里EB级计算平台,经过十年磨砺,它成为阿里巴巴集团数据中台的计算核心和阿里云大数据的基础服务. 热点热议 阿里靠什么支撑 EB 级计算力? 作者:技 ...
- 3月18日云栖精选夜读 | 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起!...
[点击订阅云栖夜读周刊] 开发者分会场致力于帮助开发者学习了解阿里云最新技术,为开发者设计全方位的技术成长与进阶之路. 热点热议 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起! 作者 ...
- 3月18日云栖精选夜读 | 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起!... 1
[点击订阅云栖夜读周刊] 开发者分会场致力于帮助开发者学习了解阿里云最新技术,为开发者设计全方位的技术成长与进阶之路. 热点热议 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起! 作者 ...
最新文章
- 关于unity 中使用AssetBundle加载资源,shader偶尔会丢失的问题解决办法
- 展望Java的未来:空值类型
- 论文浅尝 | 面向多语言语义解析的神经网络框架
- motorola 企业移动解决方案
- CSS基础必备知识点03
- 【C】malloc动态分配内存和free释放
- 2017 ACM-ICPC乌鲁木齐网络赛 G. Query on a string(KMP+树状数组)
- CSS 布局Float 【3】
- hadoop输出统计
- XNA 如何使用字体绘制文字,Windows Phone 游戏开发
- Memento(备忘录)
- 【时间序列】时间序列数据的缺失填补方法总结
- 对多频外差的改进-校正伽马误差
- 正则表达式验证邮箱手机号
- 阅读这篇文章,假设你不知道的傅里叶变换,然后来掐死我
- Java模拟醉汉行走问题_醉汉随机行走问题的统计学模型.pdf
- PC USB Warning
- 将SMILES转化为结构式的工具--SMILESDrawer介绍
- 英语发音之音标6---法(重读符号)
- 【尚硅谷_java基础】十五、网络编程
热门文章
- 安卓系统PHP MYSQL服务器,安卓手机搭建网站服务器【Php+Mysql+Lighttpd】
- addonsmaker怎么制作_addonsmaker
- unity 模型销毁_Unity3D常用 API 之实例化与销毁
- SQL语言之DDL语言学习-----数据定义语言学习
- CRC32碰撞解密压缩包密码的脚本
- 【Python教程】常见字符串去除空格的教程
- Python中的eval(),exec()以及其相关函数
- Python教程:作用域与嵌套函数
- Python 基于Python生成短8位唯一id解决方案
- python中常见的一些题目汇总