【发布时间】:2015-08-17 09:24:35
【问题描述】:
我有一个嵌套的 plsql,其中第一个需要完成:
- 首先,在外部块中,在表“A”中插入一个值“1”;打印成功消息。对此没有承诺。
- 然后,构建一个内部块,在表“A”中插入另一个值“2”并提交相同的内容;打印成功消息
- 回到外层块,然后回滚调用内层块之前插入的值'1'(请不要删除记录,回滚相同);打印成功消息
- 检查表“A”是否有 2 条记录,则程序应该存在错误。
所以基本上最后表格应该只有一条记录——值 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 的记录
【问题讨论】:
标签: sql oracle plsql sql-insert