写了很多年的代码了,事务很少用到,对事务的了解也很少。
今天遇到个事务的问题,自己实在搞不定,百度事务找不到自己想要的答案,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;