2009-06-30 11 views
2

PHP SOAPクラスを使用してWebサービスを作成しました。 OracleデータベースからXMLデータを戻す、またはデータベースに対して挿入/更新/削除を実行する機能があります。WebサービスでPHP oci_pconnect関数を使用したOracleトランザクションのキュー

しかし、現時点では自動コミットを使用しているため、操作は即座にコミットされます。

私はトランザクションをキューに入れる方法を見ていて、ユーザーがボタンを押して「保存」するときだけ、全体をコミットします。私はこれが可能かどうか調べるのが難しいです。私はもちろん、Webサービスが別々の操作のために呼び出されるので、一貫性のある接続を簡単に維持することはできません。

私はPHP oci_pconnect関数を使用しようとしましたが、同じパラメータで毎回接続しても、セッションは終了したように見え、最終的にoci_commitを呼び出すと変更はコミットされません。

アイデア?

答えて

2

PHPリクエスト間でコミットされていない同じデータベースセッションを再利用することはできません。あなたは、Webサーバが多くの誰かにランダムにリクエストを送るので、PHPプロセスまたはDB接続にユーザをロックする方法がありません。したがって、リクエスト間でOracleセッションでコミットされていないデータを保持することはできません。

これを行う最善の方法は、お客様の要件によって異なります。私の気持ちは、リクエスト間のすべての保留中のトランザクションを保持できるセッションストア(おそらくuser_idをキーとするデータベーステーブル)が必要なことです。ユーザーがsaveを押すと、保留中のすべての要求を抽出し、最終的な宛先テーブルに挿入してコミットします。

もう1つの方法として、すべてのトランザクションにまだ完了していないことを示すフラグを挿入する方法があります。保存をクリックすると、完了したことを示すフラグが更新されます。

どちらの方法でも、保存ボタンが押されるまで保留中のリクエストをステージングする必要があります。

+0

これは当然のことですが、私はそれらのコミットを保存する別の方法を検討します。ありがとう。 –

0

DBMS_XAを使用すると、セッション間でトランザクションを共有できます。

関連する問題