Oracle 的 Autonomous_transaction( 自由性交易)

建立自由性交易, 使用名为autonomous_transaction的编译指示(编译命令,, #include), 这个编译命令要放在declare里面.

Delcare or replace procedure procedure_name(params, types)

AS

PRAGMA AUTONOMOUS_TRANSACTION;

当程序执行的时候,pl/sql 会把autonomous_transaction当成独立存在的区域来处理.

用途是用在记录程序事件,不影响程序的进行.

[@more@]

一切用pl/sql 代码说话:

/* Formatted on 2006/04/27 14:05 (Formatter Plus v4.8.7) */

--test autonomous transaction

CREATE TABLE logging_infos(log_info VARCHAR2(200), log_time DATE);

COMMIT ;

/* Formatted on 2006/04/27 14:05 (Formatter Plus v4.8.7) */

--create autonomous transaction procedure

CREATE OR REPLACE PROCEDURE logging_info (

log_info_in VARCHAR2,

log_time_in DATE

)

--If your procedure's name is exit in oracle( DB) , then you cann't use it to declare a procedure with the same name

AS

PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

INSERT INTO logging_infos

(log_info, log_time

)

VALUES (log_info_in, log_time_in

);

COMMIT;

END;

books;

--create main procedure

CREATE OR REPLACE PROCEDURE book_insert (

isbn_in VARCHAR2,

title_in VARCHAR2,

summary_in VARCHAR2,

author_in VARCHAR2,

date_published_in DATE,

page_count_in NUMBER

)

AS

BEGIN

INSERT INTO books

(isbn, title, author, date_published,

page_count

)

VALUES (isbn_in, title_in, author_in, date_published_in,

page_count_in

);

-- call autonomous transcation

logging_info ('aaron_sys', SYSTIMESTAMP);

ROLLBACK;

--rollback for main procedure , not the autonomous transcation

EXCEPTION

WHEN OTHERS

THEN

dbms_ouput.put_line (SQLERRM);

END;

--test the main procedure

BEGIN

book_insert ('ISBN987654321',

'TEST2',

'summary:ddddd',

'Aaron',

TO_DATE ('2006-04-25', 'yyyy-mm-dd'),

88

);

END;

--successfuly completed

SELECT *

FROM books; ---doesn't have the add info

SELECT *

FROM logging_infos; --the logging info is added .

自动交易(autonomous_transaction 繁体版本的书,简体翻译成自由性交易或事前交易,还是觉得自由性交易比较好) , 一定要用commit or rollback, 如果不用的结果就是:

可以编译,但是在执行的时候会提示:

ORA-06519: active autonomous transaction detected and rolled back

ORA-06512: at "SYS.LOGGING_INFO", line 10

ORA-06512: at "SYS.BOOK_INSERT", line 15

ORA-06512: at line 2

建立自由性交易, 使用名为autonomous_transaction的编译指示(编译命令,, #include), 这个编译命令要放在declare里面.

Delcare or replace procedure procedure_name(params, types)

AS

PRAGMA AUTONOMOUS_TRANSACTION;

当程序执行的时候,pl/sql 会把autonomous_transaction当成独立存在的区域来处理.

用途是用在记录程序事件,不影响程序的进行.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/226700/viewspace-830834/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/226700/viewspace-830834/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自主事务(autonomous transaction)是数据库中的一种特殊种类的事务,它可以在一个父事务中被调用并且在父事务提交或回滚后继续执行。自主事务与父事务是相互独立的,它们有各自的事务控制和隔离级别。自主事务可以在父事务中执行一些独立的操作,如日志记录、数据记录、异常处理等。 自主事务的主要特点是它不受父事务的控制,它可以在父事务处于未提交状态时提交或回滚。这种特性使得自主事务能够独立于父事务运行,并且不会受到父事务回滚的影响。这样可以保证自主事务的独立性和可靠性。 自主事务的应用场景包括以下几个方面: 1. 日志记录:在父事务中记录日志时,可以使用自主事务来保证日志的独立性和可靠性。即使父事务回滚,日志记录仍能完成。 2. 数据记录:在父事务中进行数据记录时,可以使用自主事务来保证数据记录的完整性和准确性。 3. 异常处理:当出现异常情况时,可以使用自主事务来执行特定的异常处理操作,并且不会受到父事务的影响。 总之,自主事务是数据库中一种特殊的事务类型,它可以在父事务中被调用并且在父事务提交或回滚后继续执行。自主事务具有独立性和可靠性的特点,它可以在父事务未提交状态下进行提交或回滚,并且不受父事务的影响。自主事务通常应用于日志记录、数据记录和异常处理等场景中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值