SQL 解説書

OPEN

OPEN ステートメントは、カーソルをオープンして、 そのカーソルを結果表からの行の取り出しに使用できるようにします。

呼び出し

対話式 SQL 機能には外見上対話式の実行に見えるインターフェースが用意されている場合がありますが、 このステートメントはアプリケーション・プログラムに組み込むことだけが可能です。 これは、動的に作成できない実行可能ステートメントです。

許可

カーソルの使用に必要な許可については、 DECLARE CURSOR を参照してください。

構文

>>-OPEN--cursor-name----+------------------------------------+-><
                        |        .-,----------------.        |
                        |        V                  |        |
                        +-USING-----host-variable---+--------+
                        '-USING DESCRIPTOR--descriptor-name--'
 

説明

cursor-name
プログラムのそれ以前の個所にある DECLARE CURSOR ステートメントで定義されているカーソルの名前を指定します。 この OPEN ステートメントが実行される時点で、該当のカーソルはクローズ状態でなければなりません。

該当の DECLARE CURSOR ステートメントは、次のいずれかの方法により、 SELECT ステートメントを指定していなければなりません。

該当のカーソルの結果表は、その SELECT ステートメントに指定されているホスト変数の現行値、 またはこの OPEN ステートメントの USING 文節に指定されたホスト変数の現行値を使用して、 その SELECT ステートメントを評価することによって求められます。 結果表の行は、OPEN ステートメントの実行の過程で求められ、 それらを入れる一時表が作成されるか、または後続の FETCH ステートメントの実行によって求められます。 いずれの場合でも、カーソルはオープン状態になり、その位置はその結果表の最初の行の前になります。 表が空の場合、カーソルの状態は "最終行の後" になります。

USING
この後に、 準備されるステートメントのパラメーター・マーカー (?) に代入する値が入っているホスト変数のリストを指定します。 (パラメーター・マーカーについては、PREPARE を参照してください。) DECLARE CURSOR ステートメントでパラメーター・マーカーを含む準備されるステートメントを指定した場合、 USING の使用は必須です。 準備されるステートメントにパラメーター・マーカーが含まれていない場合、USING は無視されます。

host-variable
ホスト変数の宣言規則に従って、そのプログラムで記述されている変数を指定します。 変数の数は、準備されるステートメントのパラメーター・マーカーの数と同じでなければなりません。 n 番目の変数は、 準備済みステートメントの n 番目のパラメーター・マーカーに対応します。 場合によっては、ロケーター変数とファイル参照変数も、 パラメーター・マーカーの値のソースとして指定できます。

DESCRIPTOR descriptor-name
ホスト変数の有効な記述を含む SQLDA を指定します。

OPEN ステートメントが処理される前に、 ユーザーは次に示す SQLDA 内のフィールドを設定する必要があります。

  • SQLDA に用意する SQLVAR のエレメント数を示す SQLN
  • SQLDA に割り振る記憶域のバイト数を示す SQLDABC
  • ステートメントの処理中に SQLDA で使用される変数の数を示す SQLD
  • 変数の属性を示す SQLVAR のオカレンス

SQLDA には、すべての SQLVAR オカレンスが入るだけの十分な記憶域がなければなりません。 したがって、SQLDABC の値は 16 + SQLN*(N) 以上でなければなりません (N は 1 つの SQLVAR オカレンスの長さ)。

LOB の結果列を入れるには、 各選択リスト項目 (または結果表の列) ごとに 2 つの SQLVAR 項目が必要です。 SQLDOUBLED と LOB の列については、SQLDA に対する DESCRIBE の効果 を参照してください。

SQLD に設定する値は、ゼロ以上で SQLN 以下でなければなりません。 詳しくは、付録 C, SQL 記述子域 (SQLDA)を参照してください。

規則

例 1: COBOL プログラムで、以下を行う組み込みステートメントを作成します。

  1. カーソル C1 を定義します。 このカーソルは、 DEPARTMENT 表から管理部門 (ADMRDEPT) 'A00' によって管理される部門の行すべてを検索するのに使用します。
  2. 最初に取り出す行の前に、カーソル C1 を置きます。
      EXEC SQL  DECLARE C1 CURSOR FOR
                     SELECT DEPTNO, DEPTNAME, MGRNO 
                       FROM DEPARTMENT
                       WHERE ADMRDEPT = 'A00' 
      END-EXEC.
     
      EXEC SQL  OPEN C1
      END-EXEC.
     
    

例 2: C プログラムで動的に定義される選択ステートメントに カーソル DYN_CURSOR を関連付ける OPEN ステートメントをコーディングします。 選択ステートメントの述部には 2 つのパラメーター・マーカーが使用されており、 2 つのホスト参照変数をその OPEN ステートメントに指定して、 アプリケーションとデータベースとの間で整数と VARCHAR(64) の値を渡すのに使用します。 (関連するホスト変数の定義、PREPARE ステートメント、 および DECLARE CURSOR ステートメントも以下の例に示しています。)

  EXEC SQL  BEGIN DECLARE SECTION;
    static short    hv_int;
    char            hv_vchar64[64];
    char    stmt1_str[200];
  EXEC SQL  END DECLARE SECTION;
 
  EXEC SQL  PREPARE STMT1_NAME FROM :stmt1_str;
  EXEC SQL  DECLARE DYN_CURSOR CURSOR FOR STMT1_NAME;
 
  EXEC SQL  OPEN DYN_CURSOR USING :hv_int, :hv_vchar64;

例 3: 例 2 と同様に OPEN ステートメントをコーディングしますが、 この例では WHERE 文節のパラメーター・マーカーの数とデータ・タイプは未知です。

  EXEC SQL  BEGIN DECLARE SECTION;
    char    stmt1_str[200];
  EXEC SQL  END DECLARE SECTION;
  EXEC SQL  INCLUDE SQLDA;
 
  EXEC SQL  PREPARE STMT1_NAME FROM :stmt1_str;
  EXEC SQL  DECLARE DYN_CURSOR CURSOR FOR STMT1_NAME;
 
  EXEC SQL  OPEN DYN_CURSOR USING DESCRIPTOR :sqlda;


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]