oracle触发器中的after insert后继续触发,oracle触发器使用:after insert 与before insert的简单使用注意...
创建触发器时,触发器类型为after insert ,
在begin中
Select fieldA into v_a from tableA;
执行到此句时,会出错:
--弹出错误信息提示
--ORA-04091:表tr_table发生了变化触发器/函数不能读它
--ORA-06512: 在iu_table line 2
--ORA-04088: 触发器iu_table 执行过程中出错
问题分析:
在Oracle中执行DML语句的时候是需要显示进行提交操作的。当我们进行插入的时候,会触发触发器执行对触发器作用表和扩展表的种种操作,但是这个时候触发器和插入语句是在同一个事务管理中的,因此在插入语句没有被提交的情况下,我们无法对触发器作用表进行其他额外的操作。如果执行其他额外的操作则会抛出如上异常信息。
解决方案:
出错的原因是因为触发器和DML语句在同一事务管理中,所以方案一便是将触发器和DML语句分成两个单独的事务处理。这里可以使用Pragma autonomous_transaction; 告诉Oracle触发器是自定义事务处理。
Declare
pragma autonomous_transaction;
begin
-------
--这里需要显示提交事务
Commit;
End;
同时,触发器不能更新触发条件所在的行。
例如:
Create or replace trigger tri_A
After insert on tableA
For each row
Declare
pragma autonomous_transaction;
begin
update tableA set fieldA=1 where id=:new.id;
end;
当你插入数据时,会发现,这个update语句有执行,却不生效。
然后想改为:new.fieldA= 1,执行后,报错:
ORA-04084:无法更改此触发器类型的new值
这时候,要更换策略了,不过,也得根据个人需求了, 刚好我的需求可以通过更新触发器类型after insert 为before insert
oracle触发器中的after insert后继续触发,oracle触发器使用:after insert 与before insert的简单使用注意...相关推荐
- oracle触发器中的after insert后继续触发,Oracle之后插入触发器
本Oracle教程解释了如何在Oracle中创建AFTER INSERT触发器的语法和示例.AFTER INSERT触发器表示Oracle将在执行INSERT操作之后触发此触发器. 语法 在Oracl ...
- 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part 2
通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part B 6, 入站IDOC的设置 IDoc type – DELVRY01 Message Type – DES ...
- 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 - Part I
通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 - Part I 公司间采购(公司间库存转储)流程里,常见的解决方案是发货方完成发货过账后,自动触发收货方的内向交货单.除 ...
- oracle 11g json 函数,在Oracle 11g中支持JSON(Support for JSON in Oracle 11g)
在Oracle 11g中支持JSON(Support for JSON in Oracle 11g) Oracle 11g是否支持JSON? 我的意思是像在PL / SQL查询中操纵JSON对象. 我 ...
- date oracle 表中_从 MySQL 迁移数据到 Oracle 中的全过程
一.前言 这里记录一次将MySQL数据库中的表数据迁移到Oracle数据库中的全过程 ,使用工具 Navicat,版本 12.0.11 操作环境及所用工具: mysql5.7 oracle18c wi ...
- oracle数据库中的回收站,Oracle 10G 中的"回收站"-数据库专栏,ORACLE
oracle 10g 中的"回收站" by fenng http://www.dbanotes.net 在oracle 10g中,引入了一个回收站(recycle bin)的概念. ...
- 如何获取Oracle数据库中某表及索引、约束、触发器、对象权限的创
2019独角兽企业重金招聘Python工程师标准>>> 对于数据库中特定的某张表而言,又该如何获取建表语句.及索引.约束.外键约束.触发器.对象权限的创建脚本呢? OCM11g-&g ...
- oracle dba_waiters中的lockid是什么,查杀oracle lock session and table
查杀oracle 死锁的一些帖子摘录[@more@] 查找死锁进程 column sid format 999; column b format 9; column object_name forma ...
- oracle oms启动慢,停止OMS后无法启动Oracle Enterprise 13C。
Closed. This question is off-topic. It is not currently accepting answers. Want to improve this ques ...
最新文章
- pypy解释器提高python的效率之安装pypy
- Codeforces 1246D/1225F Tree Factory (构造)
- Leetcode题库191.位1的个数(C实现)
- 《Python Cookbook 3rd》笔记(1.5):实现一个优先级队列
- Matlab程序仿真与调试入门
- python安装库的方法linalg_Python linalg.gmres方法代码示例
- 0497计算机组成原理在线作业,0497《 综合实践活动课程设计》20秋西南大学在线作业答案...
- Recycleview notifyDataSetChanged()方法调用出现IllegalStateException 问题的解决
- H264 SPS中得到宽高的代码(java/c),测试通过
- MFC学习(实时更新)
- 哨兵系列卫星_空客“哥白尼哨兵1C”卫星雷达天线首次展开双翼
- 黑苹果以太网网卡已安装 无法上网
- Flink流处理框架总结
- Apache中文URL中有包含“\x85”字节的汉字时导致的Rewrite失败及404问题
- 文本域换行 php,js获取textarea文本域自动换行符
- 前端 - bootstrap树形菜单
- safair中vue修改了数据,但是视图没有更新解决方案
- 彻底解决电脑弹出USB设备时:提示该设备正在使用中无法弹出问题
- 三井化学将增加TAFMER™高性能弹性体产能
- 天梯赛题目练习L1-001,L1-002,L1-003