EXECUTE IMMEDIATE文は、動的SQL文を一度の操作で作成して実行します。システム固有の動的SQLでは、EXECUTE IMMEDIATE文を使用してほとんどの動的SQL文を処理します。
ここでのトピック
構文
execute_immediate_statement ::=

参照:
using_clause ::=

セマンティクス
execute_immediate_statement
dynamic_sql_stmt
SQL文を表す文字列リテラル、文字列変数または文字列式です。その型は、CHAR型、VARCHAR2型またはCLOB型である必要があります。
|
注意: dynamic_sql_statementがSELECT文の場合、into_clauseとbulk_collect_into_clauseの両方を省略すると、execute_immediate_statementは実行されません。
たとえば、次の文では順序を増分しません。 EXECUTE IMMEDIATE 'SELECT S.NEXTVAL FROM DUAL' |
into_clause
文によって戻される列値を格納する変数またはレコードを指定します。この句の詳細は、「RETURNING INTO句」を参照してください。
into_clauseの制限 dynamic_sql_stmtが単一の行を戻す場合にのみ使用します。
bulk_collect_into_clause
文によって戻される行を格納する1つ以上のコレクションを指定します。この句の詳細は、「RETURNING INTO句」を参照してください。
bulk_collect_into_clauseの制限 dynamic_sql_stmtが複数の行を戻す可能性がある場合にのみ使用します。
using_clause
位置表記法を使用して、バインド変数を指定します。
|
注意: 動的SQL文内でプレースホルダ名を繰り返す場合は、プレースホルダをバインド変数に関連付ける方法が動的SQL文の種類によって異なるということに注意してください。詳細は、「動的SQL文内でのプレースホルダ名の繰返し」を参照してください。 |
using_clauseの制限
dynamic_sql_stmtにバインド変数用のプレースホルダが含まれている場合にのみ使用します。
dynamic_sql_stmtにRETURNING INTO句がある場合は、using_clauseにはINバインド変数のみを含めることができます。定義上、RETURNING INTO句のバインド変数はOUTバインド変数です。
dynamic_returning_clause
動的SQL文によって影響を受ける行の列値を個々の変数またはレコードのいずれかに戻します。この句の詳細は、「RETURNING INTO句」を参照してください。
dynamic_returning_clauseの制限 dynamic_sql_stmtにRETURNING INTO句が含まれている場合にのみ使用します。
using_clause
IN、OUT、IN OUT
バインド変数のパラメータ・モード。INバインド変数は、その値をdynamic_sql_stmtに渡します。OUTバインド変数は、dynamic_sql_stmtによって戻される値を格納します。IN OUTバインド変数は、その初期値をdynamic_sql_stmtに渡し、dynamic_sql_stmtによって戻される値を格納します。デフォルト: IN。
RETURNING句を持つDML文の場合は、常にOUTであるパラメータ・モードを指定しなくても、OUTバインド変数をRETURNING INTO句に入れることができます。
bind_argument
実行時に、dynamic_sql_stmt内の対応するプレースホルダのかわりに置き換えられる値を持つ式。
dynamic_sql_stmt内のすべてのプレースホルダをUSING句内またはRETURNING INTO句内(あるいはその両方)のbind_argument、またはINTO句内の定義変数に関連付ける必要があります。
dynamic_sql_stmtは、バインド変数の異なる値を使用して繰り返し実行できます。ただし、EXECUTE IMMEDIATEは実行のたびに動的文字列を準備するため、オーバーヘッドが発生します。
bind_argumentの制限 bind_argumentの値をTRUE、FALSEまたはNULLにすることはできません。値NULLを動的SQL文に渡すには、「USING句でのNULLを表現する未初期化変数」の説明に従って、NULLを使用する未初期化変数を使用します。