2009-06-30 86 views
2

我已經使用PHP SOAP類編寫了webservice。它具有從Oracle數據庫返回XML數據或者在數據庫上執行插入/更新/刪除的功能。在web服務中使用PHP oci_pconnect函數排隊Oracle事務

但是,此刻它正在使用自動提交功能,因此任何操作都是即時提交的。

我在看如何排隊交易,然後提交整批只有當用戶按下按鈕來「保存」。我很難找出這是否可能。我無法輕鬆維護一致的連接,當然,web服務被稱爲單獨的操作。

我試過使用PHP oci_pconnect函數,但是即使當我每次連接相同的參數,會話似乎已經結束,並且我最終調用oci_commit時沒有提交我的更改。

任何想法?

回答

2

在PHP請求之間重複使用相同的未提交的數據庫會話是不可能的。您無法將用戶鎖定到PHP進程或數據庫連接,因爲網絡服務器會隨機向其中的任何一個發送請求。因此,您不能在請求之間的Oracle會話中保留未提交的數據。

做到這一點的最好方法確實取決於您的要求。我的感覺是,你想要某種會話存儲(可能是一個數據庫表,鍵入user_id),它可以容納請求之間的所有未決事務。當用戶點擊保存時,提取出所有待處理的請求並將其插入到最終的目標表中,然後提交。

另一種方法是插入所有交易的標誌,說他們還沒有完成。點擊保存後,更新標誌以表示它們已完成。

無論採用哪種方式,您都需要在某個地方處理待處理的請求,直到按下保存按鈕。

+0

這是有道理的,我會研究存儲他們的提交的替代方法。謝謝。 – 2009-06-30 14:27:50

0

DBMS_XA允許您跨會話共享事務。