当前位置: 代码迷 >> Oracle开发 >> oracle 关于事务有关问题
  详细解决方案

oracle 关于事务有关问题

热度:67   发布时间:2016-04-24 06:34:57.0
oracle 关于事务问题
写了很多年的代码了,事务很少用到,对事务的了解也很少。
今天遇到个事务的问题,自己实在搞不定,百度事务找不到自己想要的答案,google进去不,特来贵宝地求助~
以上是废话,正题如下:
最近在写代码,遇到这样一个问题,在代码中原来的封装了service层的事务统一提交回滚,现在我需要在这个service层中增加一个独立的事务做日志记录,以防service层出现异常后,所有的记录都回滚,导致没有交易记录。
我想知道当一个事务begin后但未commit,我能在该事务中开启一个新的独立的事务么?前提是同一个线程下。
如果可以怎么保证新事务的提交,不保外层的事务也提交了?

另:有没有浅显易懂的关于事务的书籍推荐下,在这谢了~
------解决思路----------------------
同一个线程应该是不行吧
可以考虑将未提交的信息存储到日志文件中,数据库的操作和文件操作是不冲突的
------解决思路----------------------
引用:
写了很多年的代码了,事务很少用到,对事务的了解也很少。
今天遇到个事务的问题,自己实在搞不定,百度事务找不到自己想要的答案,google进去不,特来贵宝地求助~
以上是废话,正题如下:
最近在写代码,遇到这样一个问题,在代码中原来的封装了service层的事务统一提交回滚,现在我需要在这个service层中增加一个独立的事务做日志记录,以防service层出现异常后,所有的记录都回滚,导致没有交易记录。
我想知道当一个事务begin后但未commit,我能在该事务中开启一个新的独立的事务么?前提是同一个线程下。
如果可以怎么保证新事务的提交,不保外层的事务也提交了?

另:有没有浅显易懂的关于事务的书籍推荐下,在这谢了~

用自治事务:
eg:

create table t (test_value varchar2(100));

CREATE OR REPLACE PROCEDURE child_block IS

  PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN
  INSERT INTO t (test_value) VALUES ('Child block insert');

  COMMIT;
END child_block;


CREATE OR REPLACE PROCEDURE parent_block IS

BEGIN
  INSERT INTO t (test_value) VALUES ('Parent block insert');

  child_block;

  ROLLBACK;
END parent_block;

  相关解决方案