動的 SQL 文とカーソル

動的 SQL 文が結果を返す場合は、EXECUTE 文を使用できません。その代わりに、カーソルを宣言して使用する必要があります。

まず、DECLARE CURSOR 文を使用してカーソルを宣言します。

EXEC SQL
   DECLARE C1 CURSOR FOR dynamic_sql
END-EXEC

上記の例では、dynamic_sql が動的 SQL 文の名前です。カーソルを開く前に、PREPARE 文を使用して動的 SQL 文を準備する必要があります。たとえば、次のように記述します。

     move "SELECT char_col FROM mfesqltest " &
          "WHERE int_col = ?" to sql-text
     EXEC SQL
        PREPARE dynamic_sql FROM :sql-text
     END-EXEC

次に、OPEN 文を使用してカーソルを開くと、PREPARE 文で定義した文が実行されます。

EXEC SQL
   OPEN C1 USING :int-col
END-EXEC

準備された文がパラメーター マーカーを使用している場合は、ホスト変数または SQLDA 構造のどちらかを指定して、これらのパラメーターに OPEN 文で値を提供する必要があります。

カーソルが開いたら、FETCH 文を使用してデータを取得します。たとえば、次のように記述します。

EXEC SQL
   FETCH C1 INTO :char-col
END-EXEC

FETCH 文の詳細については、「カーソル」を参照してください。

最後に、CLOSE 文を使用してカーソルを閉じます。

EXEC SQL
   CLOSE C1
END-EXEC

CLOSE 文の詳細については、「カーソル」を参照してください。