在一次实装中,遇到了下面的情况。
在Java调用PLSQL过程中(同一个Session)想实现业务数据登陆失败的时候,业务数据回滚。
同时将处理的一些信息作为历史Log信息写入数据库的历史操作表内提交。
可以归结为,同一个Session中实现业务数据和Log数据的事务分离。
实现思路,通过Plsql里的PRAGMA AUTONOMOUS_TRANSACTION实现
实现方法
--Log数据Plsql
Create or replace procedure INSERT_LOG(MESSAGE varchar2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO LOG VALUES(MESSAGE);
COMMIT;
END;
--业务数据Plsql
Create or replace procedure INSERT_EMPLOYEE(
FIRST_NAME varchar2,
LAST_NAME varchar2) IS
BEGIN
COMMIT;
SET TRANSACTION NAME 'tran';
SAVEPOINT sp1;
INSERT_LOG('this is a log');
INSERT INTO EMPLOYEES VALUES(FIRST_NAME ,LAST_NAME );
EXCEPTION
when others then
rollback to sp1;
END;
网友评论