我在存盤程序 sp1 中 insert 了幾條記錄, 接著呼叫了存盤程序 sp2
然后 sp2 觸發了例外, 我在 sp1 中攔截了例外, 呼叫 rollback 后退出
查詢資料發現, 在 sp1 中 insert 的幾條資料居然沒有 rollback 成功
insert into t1 values(x, y, z);
insert into t2 values(x, y, z);
begin
r := 0;
sp2(p1, p2);
r := 1;
exception
when others then null;
-- 嘗試過在這里 rollback, 也沒有成功
end;
if r != 1 then
rollback; -- 這里的 rollback 也沒有執行
return;
end if;
uj5u.com熱心網友回復:
when others then rollback;uj5u.com熱心網友回復:
試了沒用uj5u.com熱心網友回復:
在sp2里有ddl陳述句,在執行這個陳述句時發生的錯誤uj5u.com熱心網友回復:
看一下sp2例外怎么處理的uj5u.com熱心網友回復:
sp2沒有處理直接退出了uj5u.com熱心網友回復:
直接退出就無法在外層捕捉例外了,同時r的值1
uj5u.com熱心網友回復:
建議將sp2的null或者return 改成 raiseuj5u.com熱心網友回復:
我的外層可以捕捉到錯誤,現在重點不是這個錯誤,而是為什么rollback不作業
uj5u.com熱心網友回復:
你直接debug吧
uj5u.com熱心網友回復:
隨便試試吧
insert into t1 values(x, y, z);
insert into t2 values(x, y, z);
sp2(p1, p2, r);
if r != 1 then
rollback; -- 這里的 rollback 也沒有執行
return;
end if;
uj5u.com熱心網友回復:
了解下自治事務PRAGMA AUTONOMOUS_TRANSACTIONuj5u.com熱心網友回復:
試過了, 但只要在呼叫 sp2 之后, 無論在什么地方呼叫 rollback 都不會成功
但如果在呼叫 sp2 之前 rollback, 是可以成功的
uj5u.com熱心網友回復:
確定走到rollback的分支里了嗎uj5u.com熱心網友回復:
話說, 根據作業流程, 如果代碼沒有進入 rollback 的分支, 那么就代表沒有錯誤發生, 結果就是我不會發現 rollback 執行無效而我知道 rollback 執行無效, 那么就肯定進入了該分支了對不對.............
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/6868.html
標籤:基礎和管理
下一篇:最近24小時排序
