2010-01-29 54 views
5

我正在使用PHP + Oracle,並想知道是否有任何關於在哪裏提交我的交易的建議。我調用存儲過程來完成我所有的插入/更新/刪除操作,並且當前正在存儲過程結束時進行提交。我應該在哪裏提交事務 - 在存儲過程中還是在調用應用程序代碼中?

我想知道:

  1. 有沒有調用commit在我的存儲 程序/回滾VS基於 調用oci_commit/ oci_rollback在我的PHP代碼中的存儲過程 成功 之間有什麼區別呼叫。

  2. 哪個更好?本來 我想在存儲 程序本身,但現在我 想知道,如果沒有區別, 也許它會給我更多的 靈活地調用 應用程序代碼提交,因爲我可以打電話給 幾個存儲過程在 單筆交易中,而不是 必須編寫新的存儲的 程序,每次我想在單個交易中混合/匹配各種SQL 報表。

想法?

回答

7

我絕對同意選項2,因爲你給的理由。讓每個存儲過程充當單獨的事務有時可能太有限制。 Tom Kyte也會支持選項2:例如,參見this AskTom thread

+0

感謝您的鏈接......它是現貨。 – 2010-02-05 16:24:19

3

不確定PHP/Oracle,但我們的SQL procs檢查它們是否已經在事務中。如果他們是他們只是做他們做的事情。如果不是,他們自己創建一個事務並提交/回滾。這給了我們靈活性,尤其是對於從多個不同進程調用的特效。

+0

有趣的想法。我想看看檢測機制。你有鏈接嗎? – NotMe 2010-01-29 15:14:57

+0

我們只是使用SQL Server內置的@@ TRANCOUNT – xando 2010-01-29 15:19:08

4

選項2是作爲一般規則去的方法。如果你在你的存儲過程中有你的提交,你決定不管是誰給我打電話,我知道的更好,當我完成我的工作時應該進行任何公開的交易。

假設你有一些有多個步驟的過程,並且需要全部提交它們或將它們全部回滾。如果這個過程恰好調用了其中一個提交的存儲過程作爲其工作的一部分,那麼到此爲止的所有內容都可能由該存儲過程提交。

讓調用者決定事務應該發生什麼幾乎總是可取的。一個正常的例外情況是針對需要特定情況的案例的自治事務。

相關問題