静的SQL文における名前解決
静的SQLの詳細は、「PL/SQLの静的SQL」を参照してください。
PL/SQLコンパイラが静的SQL文を見つけると、次の処理が行われます。
-
その文が
SELECT
文の場合、PL/SQLコンパイラはINTO
句を削除します。 -
PL/SQLコンパイラは、その文をSQLサブシステムに送信します。
-
SQLサブシステムで、その文の構文がチェックされます。
構文が正しくない場合、PL/SQLユニットのコンパイルは失敗します。構文が正しい場合は、SQLサブシステムによって表の名前が決定され、そのSQL文の有効範囲でその他の名前の解決が試行されます。
-
そのSQL文の有効範囲で名前を解決できない場合、SQLサブシステムは、その名前をPL/SQLコンパイラに送り返します。この名前は、エスケープ識別子と呼ばれます。
-
PL/SQLコンパイラは、エスケープ識別子を解決しようとします。
まず、コンパイラは、PL/SQLユニットの有効範囲で識別子を解決しようとします。それが失敗すると、コンパイラは、スキーマの有効範囲で識別子を解決しようとします。それが失敗すると、PL/SQLユニットのコンパイルは失敗します。
-
PL/SQLユニットのコンパイルが成功すると、PL/SQLコンパイラは、静的SQL文と等価な通常のSQL文テキストを生成し、生成されたコンピュータ・コードとともにそのテキストを格納します。
-
実行時に、PL/SQLランタイム・システムによって、通常のSQL文を解析、バインド、実行するルーチンが起動されます。
バインド変数はエスケープ識別子です(ステップ 4を参照)。
-
この文が
SELECT
文の場合、PL/SQLランタイム・システムでは、ステップ 1でPL/SQLコンパイラによって削除されたINTO
句に指定されたPL/SQLターゲットに結果が格納されます。
ノート:
バインド変数はどのような順序でも評価できます。プログラムにより評価の順序が決定される場合は、プログラムで決定が行われる時点で動作は定義されません。