EXECUTE IMMEDIATE
(動的 SQL メソッド 1USING
) は句をサポートしていません。
代わりに準備して実行できます (動的 SQL メソッド 2を使用):
EXEC SQL PREPARE ora_stmt FROM :stmt;
EXEC SQL EXECUTE stmt USING :v1, :v2, :v3, :v4;
これを動的に行う必要はまったくないように見えますが、動的に行うことを選択した場合は、適切な方法を使用する必要があります。
ドキュメントの詳細:
方法 1 は、EXECUTE IMMEDIATE コマンドを使用して SQL ステートメントを解析し、すぐに実行します。コマンドの後には、実行する SQL ステートメントを含む文字列 (ホスト変数またはリテラル) が続きます。これはクエリではありません。
EXECUTE IMMEDIATE ステートメントの構文は次のとおりです。
EXEC SQL EXECUTE IMMEDIATE { :host_string | string_literal };
...
方法 2 では、SQL ステートメントに入力ホスト変数と標識変数のプレースホルダーを含めることができます...
PREPARE ステートメントの構文は次のとおりです。
EXEC SQL PREPARE statement_name
FROM { :host_string | string_literal };
PREPARE は SQL ステートメントを解析し、名前を付けます。
statement_name は、プリコンパイラによって使用される識別子であり、ホスト変数またはプログラム変数ではないため、宣言セクションで宣言しないでください。これは、EXECUTE する準備済みステートメントを指定するだけです。
EXECUTE ステートメントの構文は次のとおりです。
EXEC SQL EXECUTE statement_name [USING host_variable_list];
ここで、host_variable_list は次の構文を表します。
:host_variable1[:indicator1] [, host_variable2[:indicator2], ...]
EXECUTE は、各入力ホスト変数に指定された値を使用して、解析された SQL ステートメントを実行します。