ORA-04092: COMMIT 不能在触发器中
2024-08-26 03:56:55
触发器无需commit
也不能写commit
触发器和触发它的DML是同一个事务
DML提交了,触发器的操作也提交了,要不就一起回滚了
当然,如果你一定要在触发器里写COMMIT
那就用自治事务
相当于一个事务里的子事务
正常情况下,Oracle规定在触发器中不能运行 ddl语句和commit,rollback语句。
解决办法有两种:
1.在可以在触发器中加入:pragma autonomous_transaction; 表示自由事务处理。
如:
CREATE OR REPLACE TRIGGER T_create BEFORE insert ON T_RCatalogue
for each row
DECLARE
pragma autonomous_transaction;
NRDSId varchar(500):='';
begin
2.可以另外写一个方法,把dll语句传递到这个方法中去执行。
注释:
ddl语句:DDL语句用语定义和管理数据库中的对象,如Create,Alter,Drop,truncate等;DDL操作是隐性提交的!操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger
DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数据库中的数据。如insert,delete,update,select等都是DML
最新文章
- 封锁Skype的广告(非原创)
- php生成随机密码的几种方法
- Qt开发中的实用笔记一--xml,Qpainter,Delegate:
- IO调度器
- Jenkins入门总结
- net组件转化成COM组件
- Oracle 数据库安装
- pyqt 同时勾选多个items(网友提供学习)
- Python3 TA-Lib
- [codility] Lession1 - Iterations - BinaryGap
- jstl select <;c:if test下拉菜单不能被选中!
- FortiGate日志设置
- 带参数的main函数以及execl函数的应用
- Git 修复 bug 切换分支时,如何保存修改过的代码(即如何保存现场)?
- 【machine translate】deep learning seq2seq
- HDU 2546 饭卡(0-1背包)
- Linux统计某文件夹下文件的个数
- 【Android】15.4 例15-2--Notification基本用法
- json对象转换
- ionic 日期插件学习