Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU -
目次 索引 前ページ次ページ

第2章 アプリケーションの設計> 2.4 トランザクションと排他制御> 2.4.2 トランザクション制御の方法

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

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

以下に独立性水準指定に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(カーソル不当)のエラーとなります。このエラーが発生した場合は、カーソルをクローズして、再度オープンするようにしてください。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2007-2008