我有一个嵌套的plsql,第一个需要完成:
所以基本上最后这个表应该只有一个记录 - 值2
declare
count_num integer;
procedure second_commit is
pragma autonomous_transaction;
begin
insert into Table_A values(1);
dbms_output.put_line('Successfully entered 1');
begin
insert into Table_A values(2);
commit;
dbms_output.put_line('Successfully entered 2 and committed');
end second_commit;
rollback;
dbms_output.put_line('Rollback Done');
select count(*) into count_num from Table_A;
if (count_num=2) then
dbms_output.put_line('Exit with error');
else
dbms_output.put_line('Normal Exit');
end if;
end;
如果我按照上面的代码,表会提交两个记录,然后回滚到最后一个提交,这意味着它不会回滚任何记录 在上面的代码中我基本上需要使内部块(其中2被插入)pragma自治或做一些事情,因为在调用内部块回滚之前插入值1并且仅保留值为2的记录
答案 0 :(得分:0)
你快到了。 second_commit过程应该是自治的,并且应该只进行第二次插入和提交:
declare
count_num integer;
procedure second_insert_and_commit is pragma autonomous_transaction;
begin
insert into Table_A values(2);
commit;
dbms_output.put_line('Successfully entered 2 and committed');
end second_insert_and_commit;
begin
insert into Table_A values(1);
dbms_output.put_line('Successfully entered 1');
second_insert_and_commit;
rollback;
dbms_output.put_line('Rollback Done');
select count(*) into count_num from Table_A;
if (count_num=2) then
dbms_output.put_line('Exit with error');
else
dbms_output.put_line('Normal Exit');
end if;
end;