Oracle开发之触发器调用存储过程
2012-11-29 09:32
288 查看
转载原文地址:/article/8412039.html
大家都知道触发器是无需commit的,而且也不能写commit;触发器和触发它的DML是同一个事务
DML提交了,触发器的操作也提交了,所以无需Commit;否则就会造成错误信息。
当然,如果你一定要在触发器里写COMMIT,那也是可以的,可以用Oracle中的自治事务来处理,自治事务就相当于一个事务里的子事务。
在正常情况下,Oracle规定在触发器中不能运行 DDL(即Create/Alter/Drop)语句和Commit/Rollback语句的,因为DDL操作是隐性提交的,在触发器不允许有Commit,如在触发器中加入DDL语句,这种隐性提交就会导致错误信息;但有时特殊情况下需要在触发器中使用DDL语句,这时怎么办。
可以采取以下的解决办法:
大家都知道触发器是无需commit的,而且也不能写commit;触发器和触发它的DML是同一个事务
DML提交了,触发器的操作也提交了,所以无需Commit;否则就会造成错误信息。
当然,如果你一定要在触发器里写COMMIT,那也是可以的,可以用Oracle中的自治事务来处理,自治事务就相当于一个事务里的子事务。
在正常情况下,Oracle规定在触发器中不能运行 DDL(即Create/Alter/Drop)语句和Commit/Rollback语句的,因为DDL操作是隐性提交的,在触发器不允许有Commit,如在触发器中加入DDL语句,这种隐性提交就会导致错误信息;但有时特殊情况下需要在触发器中使用DDL语句,这时怎么办。
可以采取以下的解决办法:
create or replace trigger trigger_table1 after update or insert on martin.table1 for each row declare PRAGMA AUTONOMOUS_TRANSACTION;--自制事务处理 begin --调用拆分存储过程,触发器每次只拆分一条 mc_print( :NEW.id,:NEW.name ); commit; end trigger_table1 ;
相关文章推荐
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- Oracle 触发器调用包中的存储过程
- Day60-Oracle04 - PLSQL编程、游标cursor、例外exception、存储过程(procedure)、存储函数(function)、java调用存储过程、触发器(trigger)
- Oracle 存储过程的创建,及触发器调用存储过程
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- Oracle 存储过程的创建,及触发器调用存储过程
- 调用带参数的存储过程,并返回结果集--oracle
- Spring 调用ORACLE存储过程的结果集
- oracle 在一个存储过程中调用另一个返回游标的存储过程
- ORACLE----触发器,存储过程及JOB
- j2ee调用Oracle带数组参数和游标的存储过程方法
- Oracle复合类型参数的存储过程以及JDBC调用
- 在Oracle的存储过程中使用dblink调用远程存储过程备忘
- 如何调用 Oracle 存储过程在 Visual Basic.NET 使用 Microsoft Oracle 托管提供程序
- oracle设置定时任务来调用存储过程完成统计(每小时计时一次存到hour表)
- 用.NET调用oracle的存储过程返回记录集
- Mybatis调用Oracle中的存储过程和function
- oracle 父存储过程调用子过程的事务问题
- oracle 存储过程语法实例以及调用方法
- Java 调用Oracle中的存储过程