PHP の OCI ライブラリを使用して Oracle と通信しています。すべての関数には、例外をキャッチするための try...catch があります。catch 部分では、独自のエラー処理関数を呼び出します。
例外が発生した場合、できればエラー処理関数で、開いているすべての接続をオラクルにロールバックしたいと考えています。これは可能ですか?
ありがとう
# #少しハックですが、問題を解決した方法を次に示します。
Oracle に接続する connect() 関数に、次のコードを挿入します。
if(!isset($GLOBALS['OPEN_CONNECTIONS'])){
$GLOBALS['OPEN_CONNECTIONS'] = array();
$GLOBALS['OPEN_CONNECTIONS'][] = $this;
}else{
$GLOBALS['OPEN_CONNECTIONS'][] = $this;
}
これにより、グローバル スコープで開いているすべての接続のリストが格納されます。
エラー処理関数では、次のようにします。
//rollback all open connections
if(isset($GLOBALS['OPEN_CONNECTIONS'])){
foreach($GLOBALS['OPEN_CONNECTIONS'] as $con){
$con->rollback();
}
}
このようにして、開いているすべての接続をエラー ハンドラに渡すことなくロールバックできます。