ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

1.1.4 トランザクションとカーソル操作

データ操作において、操作の対象とする行を指示する指示子のことを“カーソル”と呼びます。

カーソルについての詳細は、“第7章 カーソルを使用するデータ操作の方法”を参照してください。

カーソルは、一般に、トランザクション終了時にクローズされます。しかし、次の場合、カーソルはクローズされません。

以下に独立性水準指定にREAD COMMITTEDを指定し、更新可能性句にFOR READ ONLYを指定して実現する、トランザクションを超越するカーソル操作のSQL文の例を示します。

EXEC SQL DECLARE CSR1 CURSOR FOR                            ……(1)
                  SELECT * FROM 取引先会社
                  WHERE  電話番号 LIKE  :hcomp_word
                  FOR  READ  ONLY;

EXEC SQL SET TRANSACTION  READ  ONLY,                       ……(2)
                          ISOLATION LEVEL  READ  COMMITTED;
EXEC SQL OPEN  CSR1;                                        ……(3)
EXEC SQL FETCH CSR1 INTO :hnumber,:hproduct,:hstock;        ……(4)
            :
EXEC SQL COMMIT WORK;                                       ……(5)


EXEC SQL FETCH CSR1 INTO :hnumber,:hproduct,:hstock;        ……(6)
            :
      (データの終了)

EXEC SQL CLOSE CSR1;                                        ……(7)

(1) カーソル“CSR1”を宣言します。更新可能性句に“FOR READ ONLY”を設定します。

(2) トランザクションアクセスモードに“READ ONLY”を設定します。独立性水準に“READ COMMITTED”を設定します。

(3) カーソル“CSR1”をオープンします。

(4) 探索条件が真となる行にカーソルを位置づけ、その行を読み込みます。

(5) COMMITによりトランザクションを終了します。

(6) (5)でカーソルがクローズされないため、カーソルを位置づけることができます。

(7) データ終了後、カーソル“CSR1”をクローズします。


また、以下にカーソルモード指定によって実現する、トランザクションを超越するカーソル操作のSQL文の例を示します。

EXEC SQL DECLARE CSR1 CURSOR FOR                                ……(1)
         SELECT * FROM  取引先会社
         WHERE 電話番号 LIKE :hcomp_word
         WITH OPTION LOCK_MODE(FREE LOCK),CURSOR_MODE(HOLD); 
EXEC SQL OPEN CSR1; ……(2) EXEC SQL FETCH CSR1 INTO :hnumber,:hproduct,:hstock; ……(3) : EXEC SQL COMMIT WORK; ……(4) EXEC SQL FETCH CSR1 INTO :hnumber,:hproduct,:hstock; ……(5) : (データの終了) EXEC SQL CLOSE CSR1; ……(6)

(1) カーソル“CSR1”を宣言します。カーソルモード指定に“HOLD”を設定します。

(2) カーソル“CSR1”をオープンします。

(3) 探索条件が真となる行にカーソルを位置づけ、その行を読み込みます。

(4) COMMITによりトランザクションを終了します。

(5) (4)でカーソルがクローズされないため、カーソルを位置づけることができます。

(6) データ終了後、カーソル“CSR1”をクローズします。

トランザクションを超越するカーソルを使用する場合の注意事項

トランザクションを超越するカーソルを使用する場合、カーソルのオープン中に、そのカーソルが参照する表の定義や格納構造定義が変更されると、次のトランザクションでFETCH文の実行が、SQLSTATE値が24000(カーソル不当)のエラーとなります。このエラーが発生した場合は、カーソルをクローズして、再度オープンするようにしてください。