oracle 中触发器,commit 的问题
2011-07-05 22:45
316 查看
触发器无需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
也不能写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
相关文章推荐
- oracle 中触发器增加存储过程commit问题
- oracle impdp将导出用户的所有对象导入至另一个用户下,生成的触发器语句问题处理
- Oracle Form 的POST-FORMS-COMMIT触发器用法
- ORACLE子存储过程中的COMMIT语句引发的问题
- Oracle创建触发器遇到的问题
- ORACLE 触发器问题
- ORACLE子存储过程中的COMMIT语句引发的问题
- 《oracle每天一练》触发器不能调用或间接调用COMMIT,ROLLBACK等DCL语句
- 利用触发器和INSERT INTO ...SELECT...解决Oracle 数据匹配问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- 新手第一次联系oracle的碰到的触发器不能创建的问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle冒号问题联系触发器中new和old的冒号问题':'
- Mybatis处理ORACLE自增的问题(通过触发器)
- oracle冒号问题联系触发器中new和old的冒号问题':'
- 小菜鸟问:oracle中的一个触发器问题
- 关于Oracle存储过程中是否需要写commit的问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle创建触发器的脚本在sqlplus中执行不了问题的解决
- oracle 触发器更新基表不同记录所产生的问题