動的 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 文の詳細は、「カーソル」を参照してください。