カーソルの宣言

カーソルは、使用する前に宣言されている必要があります。それには DECLARE CURSOR 文が使用され、そこにカーソルの名前と SELECT 文、または準備された SELECT 文の名前を指定します。

カーソル名は、接続するデータベースの識別子に対する規則に準拠する必要があります。たとえば、識別子にハイフンを使用できないデータベースでは、カーソル名にもハイフンを使用できません。

 EXEC SQL
     DECLARE Cur1 CURSOR FOR
      SELECT first_name FROM employee 
       WHERE last_name = :last-name
 END-EXEC

この例では、入力ホスト変数 (:last-name) を使用して SELECT 文を指定しています。カーソルの OPEN 文が実行されると、入力ホスト変数の値が読み込まれ、SELECT 文が実行されます。

 EXEC SQL
     DECLARE Cur2 CURSOR FOR stmt1
 END-EXEC
      . . .
     move "SELECT first_name FROM emp " &
          "WHERE last_name=?" to prep.
     EXEC SQL
        PREPARE stmt1 FROM :prep
     END-EXEC
      . . .
     EXEC SQL
        OPEN Cur2 USING :last-name
     END-EXEC

この例では、DECLARE CURSOR 文が PREPARE 文で定義した文 (stmt1) を参照しています。準備済みの SELECT 文には疑問符 (?) を含めることができ、それはカーソルが開く際に、必要なデータが供給されるよう指示するパラメーター マーカーとして機能します。カーソルは、文が準備される前に宣言されている必要があります。

オブジェクト指向 (OO) プログラムでは、データ項目を宣言することが許されている場所であればどこにでも、カーソルを宣言することができます。カーソルは、開かれるカーソルを含むオブジェクトにとってはローカルになるため、同一オブジェクトの 2 つのインスタンスが「同じ」カーソルを開いたとしても、それぞれが別のカーソルのインスタンスを得ることになります。カーソルをあるメソッドでオープンし、第 2 のメソッドで取り込み、第 3 のメソッドでクローズできますが、その場合には、カーソルをオブジェクト記憶節で宣言する必要があります。

COBSQL

カーソルは、プログラムのデータ部または手続き部のどちらかで宣言できます。DECLARE CURSOR 文はコードを生成しませんが、カーソルが手続き部で宣言された場合には、COBSQL は DECLARE CURSOR 文に対してデバッグ ブレークポイントを生成します。

注:
  • オブジェクト指向 COBOL 構文は、COBSQL ではサポートされていません。
  • Informix プリコンパイラの一部のバージョンでは、カーソルが作業場所節内で宣言されると、無効なコードが生成されることがあります。このため、INFORMIX を使用する場合には、カーソルは手続き部のみで宣言することをお勧めします。