PRAGMAAUTONOMOUS_TRANSACTION
自治事务是与主事务相分离的,所以它不能检测到被修改过的行的当前状态。这就好像在主事务提交之前,它们一直处于单独的会话里,对自治事务来说,它们是不可用的。然而,反过来情况就不同了:主事务能够检测到已经执行过的自治事务的结果。
--1、建测试表
-- Create table
create table MSG
( uuid VARCHAR2(32) default sys_guid() primary key,
msg VARCHAR2(50)
)
--2、创建自制事务:
create or replace procedure autonomouse_insert is
pragma autonomous_transaction;
begin
insert into msg(msg) values ('AutoNomouse Insert');
commit;
end;
--3、非自治事务:
create or replace procedure nonautonomouse_insert as
begin
insert into msg(msg) values ('NonAutonomouse Insert');
commit;
end;
-------------------------------------
SELECT * FROM msg;
truncate table msg;
-------------------------------------
---比对1----
begin
insert into msg(msg) values ('This Main Info');
nonautonomouse_insert;
rollback;
end;
begin
insert into msg(msg) values ('This Main Info');
autonomouse_insert;
rollback;
end;
---比对2-----
begin
insert into msg(msg) values ('This Main Info');
rollback;
nonautonomouse_insert;
rollback;
end;
BEGIN
INSERT INTO msg (msg) VALUES ('This Main Info');
ROLLBACK;
autonomouse_insert;
ROLLBACK;
END;