プライマリ・コンテンツに移動
Oracle Database PL/SQL言語リファレンス
12c リリース1 (12.1)
B71296-06
目次へ移動
目次
索引へ移動
索引

前
次

EXECUTE IMMEDIATE文

EXECUTE IMMEDIATE文は、動的SQL文を一度の操作で作成して実行します。

システム固有の動的SQLでは、EXECUTE IMMEDIATE文を使用してほとんどの動的SQL文を処理します。

注意:

動的SQLを使用する場合は、セキュリティ・リスクのSQLインジェクションに注意してください。SQLインジェクションの詳細は、「SQLインジェクション」を参照してください。

ここでのトピック

構文

セマンティクス

execute_immediate_statement

dynamic_sql_stmt

SQL文を表す文字列リテラル、文字列変数または文字列式です。その型は、CHAR型、VARCHAR2型またはCLOB型である必要があります。

注意:

dynamic_sql_statementSELECT文の場合、into_clausebulk_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が複数の行を返すことができる場合にのみ使用します。

dynamic_returning_clause

動的SQL文によって影響を受ける行の列値を個々の変数またはレコードのいずれかに戻します。この句の詳細は、「RETURNING INTO句」を参照してください。

dynamic_returning_clauseの制限

dynamic_sql_stmtRETURNING INTO句を持つ場合にのみ使用します。

using_clause

位置表記法を使用して、バインド変数を指定します。

注意:

動的SQL文内でプレースホルダ名を繰り返す場合は、プレースホルダをバインド変数に関連付ける方法が動的SQL文の種類によって異なるということに注意してください。詳細は、「動的SQL文内でのプレースホルダ名の繰返し」を参照してください。

using_clauseの制限

  • dynamic_sql_stmtにバインド変数用のプレースホルダが含まれている場合にのみ使用します。

  • dynamic_sql_stmtRETURNING INTO句(static_returning_clause)がある場合は、using_clauseにはINバインド変数のみを含めることができます。定義上、RETURNING INTO句のバインド変数はOUTバインド変数です。

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に、文字列で索引付けされている連想配列は使用できません。

  • bind_argumentに、予約語NULLは使用できません。

    NULLを動的SQL文に渡すには、例7-7で示すように、NULLを使用する場所に未初期化変数を使用します。

  • 例7-1動的PL/SQLブロックからのサブプログラムの起動

  • 例7-7USING句でのNULLを表現する未初期化変数

  • 例7-10動的PL/SQLブロックで繰り返されるプレースホルダ名