PRAGMA AUTONOMOUS_TRANSACTION

数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败。在Oracle中,一个事务是从执行第一个数据管理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束。

针对这种困境,Oracle提 供了一种便捷的方法,即自治事务。自治事务从当前事务开始,在其自身的语境中执行。它们能独立地被提交或重新运行,而不影响正在运行的事务。正因为这样, 它们成了编写错误日志表格的理想形式。在事务中检测到错误时,您可以在错误日志表格中插入一行并提交它,然后在不丢失这次插入的情况下回滚主事务。

因为自治事务是与主事务相分离的,所以它不能检测到被修改过的行的当前状态。这就好像在主事务提交之前,它们一直处于单独的会话里,对自治事务来说,它们是不可用的。然而,反过来情况就不同了:主事务能够检测到已经执行过的自治事务的结果。

PRAGMA AUTONOMOUS_TRANSACTION 自治事务 不受别的事务的影响

1 CREATE OR REPLACE FUNCTION FUNC_CREATE_DEMO RETURN NUMBER IS
2   LINK_ID NUMBER;
3   PRAGMA AUTONOMOUS_TRANSACTION;
4 BEGIN
5   --LINK_ID RES_SPEC_ID OPR_STATE_ID
6   --do something  insert update delete
7   COMMIT;
8   RETURN LINK_ID;
9 END;
View Code

 

posted @ 2014-12-30 10:28  BinarySheep  阅读(626)  评论(0编辑  收藏  举报