我在Oracle數據庫中有幾個存儲過程作爲第三方API,我想在一個事務中鏈接這些API調用。我可以做嗎? 據我所知,從that answer我可以使用保存點。但是,如果這些API已經有提交語句,它會起作用嗎? Oracle會回滾嵌套提交嗎?Oracle中的交易
另外,Oracle如何處理保存點和併發? 也就是說如果我們有圖表:
connection#1 (my api call) connection#2 (3rd party api call)
savepoint sp1;
savepoint sp2;
update t1 where id=1 set val=1; update t1 where id=2 set val=2;
commit; --done
call bad_stored_proc();
rollback to sp1;
這裏會發生什麼?回滾只會影響行(id = 1,val = 1)還是兩行?
你不能回滾什麼已經提交。所以在這種情況下,調用的順序很重要,你想要回滾到什麼程度。顯然,你將無法回滾供應商SP的承諾工作。所以你必須專注於你自己的代碼。您的代碼是否依賴於供應商的Sp執行結果?它按順序進行呼叫。它是首先/最後還是在對供應商SP的呼叫中間?說過你可以避免調用供應商的sps,或者在你回滾之後不可避免地清理它們(應該非常小心,取決於那些SP做什麼)。 –
如果他們(供應商的SP)承諾,它可能是一個「bug」或供應商有一個非常引人注意的需要,所以你需要非常小心清理後,如果你選擇這樣做。 –