一般的に、COMMIT が実行されると、カーソルは閉じられます。この動作には、2 つの例外があります。
close_on_endtrans データベース・オプションが Off に設定されている。
カーソルが WITH HOLD で開かれている。Open Client と JDBC ではデフォルト。
この 2 つのどちらかが真の場合、カーソルは COMMIT 時に開いたままです。
トランザクションがロールバックされた場合、WITH HOLD でオープンされたカーソルを除いて、カーソルは閉じられます。しかし、ロールバック後のカーソルの内容は、信頼性が高くありません。
ISO SQL3 標準の草案には、ロールバックについて、すべてのカーソルは (WITH HOLD でオープンされたカーソルも) 閉じられるべきだと述べられています。この動作は ansi_close_cursors_on_rollback オプションを On に設定して得られます。
トランザクションがセーブポイントへロールバックされ、ansi_close_cursors_on_rollback オプションが On に設定されていると、SAVEPOINT 後に開かれたすべてのカーソルは (WITH HOLD でオープンされたカーソルも) 閉じられます。
トランザクションが SET OPTION 文を使って isolation_level オプションを変更する間、接続の独立性レベルを変更できます。ただし、この変更は開いているカーソルには反映されません。
WITH HOLD 句が snapshot、statement-snapshot、および readonly-statement-snapshot の各独立性レベルで使用されている場合、スナップショットの開始時にコミットされたすべてのローのスナップショットが表示されます。カーソルが開かれたトランザクションの開始以降の、現在の接続で完了された変更もすべて表示されます。サポートされている独立性レベルの詳細については、独立性レベルと一貫性とisolation_level オプション [データベース] [互換性]を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |