ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

3.2.12 拡張カーソル名を使用したカーソル操作

ここでは、拡張カーソル名で指定されたカーソルの使用方法について説明します。

拡張カーソル

ALLOCATE CURSOR文を使用して宣言したカーソルを拡張カーソルといいます。

拡張カーソルは、ALLOCATE CURSOR文に拡張カーソル名および拡張SQL文識別子を指定して定義します。拡張カーソル名は、文字列型のホスト変数を使用して定義し、アプリケーションの実行時に値を動的に設定します。

拡張カーソル名は、以下のSQL文に指定できます。

拡張カーソル名の使用方法

拡張カーソル名を使用すると、ホスト変数を指定することによりカーソルの名前を実行時に動的に指定することが可能になるため、複数のカーソルを宣言する場合にカーソル宣言をまとめることができます。

そのため、多数のカーソルを操作するアプリケーションでも、開発量の削減を実現できます。

拡張カーソル名ではなくカーソル名を使用すると、カーソルの名前をSQL文中に識別子として文字列で指定するため、複数のカーソルを宣言する場合は、使用するカーソルの数だけカーソル宣言を記述する必要があります。

また、カーソルを操作する場合は、個々のカーソル名を記述したSQL文を記述しなければなりません。

そのため、多数のカーソルを使用するアプリケーションは、その開発規模が大きくなってしまいます。

拡張カーソル名を使用した場合とカーソル名を使用した場合で、複数のカーソルを宣言する例を以下に示します。

例1

拡張カーソル名を使用して、複数のカーソルを宣言する例を示します。

              :
001010     PERFORM VARYING LOOP FROM 1 BY 1 UNTIL LOOP > nn
003010         EXEC SQL PREPARE :cmd1 FROM :strsql END-EXEC.      (1)
003010         EXEC SQL ALLOCATE :cur1 CURSOR FOR :cmd1 END-EXEC.(2)
000000     END-PERFORM.
              :

(1)拡張SQL文識別子を使用して、ループによりnn個の準備可能文を準備します。

(2)拡張カーソル名を使用して、ループによりnn個のカーソルを宣言します。

例2

カーソル名を使用して、複数のカーソルを宣言する例を示します。

              :
001000     EXEC SQL PREPARE CMD1 FROM :strsql END-EXEC.          (1)
001010     EXEC SQL PREPARE CMD2 FROM :strsql END-EXEC.          (1)
001020     EXEC SQL PREPARE CMD3 FROM :strsql END-EXEC.          (1)
              :
              :
002010     EXEC SQL PREPARE CMDnn FROM :strsql END-EXEC.         (1)
              :
002020     EXEC SQL DECLARE CUR1 CURSOR FOR CMD1 END-EXEC.          (2)
002030     EXEC SQL DECLARE CUR2 CURSOR FOR CMD2 END-EXEC.          (2)
002040     EXEC SQL DECLARE CUR3 CURSOR FOR CMD3 END-EXEC.          (2)
              :
              :
002nn0     EXEC SQL DECLARE CURnn CURSOR FOR CMDnn END-EXEC.        (2)
              :

(1)SQL文識別子CMD1~CMDnnを定義します。

(2)SQL文識別子CMD1~CMDnnに対し、カーソルCUR1~CURnnを宣言します。

拡張カーソル名の有効範囲

拡張カーソル名の有効範囲はセションになります。

そのため複数のコンパイル単位にまたがって使用することができ、拡張カーソル名を使用するSQL文ごとにカプセル化し、共有することが可能です。

複数のコンパイル単位にまたがった拡張カーソルの使用例を示します。

sub_pre.scob
000030 IDENTIFICATION DIVISION.
000040 PROGRAM-ID. SUB-PREP.
              :
001000       EXEC SQL PREPARE :cmd1 FROM :strsql END-EXEC.       (1)
              :

(1)ホスト変数cmd1を使用して拡張SQL文識別子を定義します。

sub_alloc_cur.scob
000030 IDENTIFICATION DIVISION.
000040 PROGRAM-ID. SUB-ALLOC.
              :
001000       EXEC SQL ALLOCATE :cur1 CURSOR FOR :cmd1 END-EXEC.  (1)
              :

(1)拡張カーソル名cur1と拡張SQL文識別子cmd1を使用して拡張カーソルを宣言します。

sub_open.scob
000030 IDENTIFICATION DIVISION.
000040 PROGRAM-ID. SUB-OPEN.
              :
001000       EXEC SQL OPEN :cur1 END-EXEC.                       (1)
              :

(1)拡張カーソルcur1をオープンします。