oracle 自治事务
时间:2011-04-12 来源:CodeFarmer
oracle自治事务(autonomous transaction)是由父事务或主事务启动的。这类事务都独立于父事务进行操作。如果在自治事务中
使用了回滚或提交,或者由于某种原因发生了错误,都不会影响其他事物。
自治事务可以使用名为AUTONOMOUS_TRANSACTION的编译指令pragmat创建一个自治事务。
示例:
--包含自治事务的添加日志的过程
CREATE OR REPLACE PROCEDURE loggin_ins (
i_username IN VARCHAR2,
i_datetime IN TIMESTAMP)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO logging (username,datetime)
VALUES(i_username,i_datetime);
commit;
END;
----------------------------------------------------------------------------------------------------
--主过程调用日志添加过程
CREATE OR REPLACE PROCEDURE book_ins(
i_isbn BOOKS.ISBN%TYPE,
i_title BOOKS.TITLE%TYPE,
i_price BOOKS.PRICE%TYPE
)
IS
BEGIN
INSERT INTO BOOKS (ISBN,TITLE,PRICE) VALUES();
LOGGIN_INS('PLSQL',SYSTIMESTAMP);
ROLLBACK;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUTLINE(SQLERM);
END;
--在调用主过程book_ins中在调用logging_ins后使用了回滚,但是只能够将当前过程中的事务回滚,并不能影响logging_ins中的事务提交,
自治事务不受父事务的影响。