SQL パラメーター、SQL 変数、およびグローバル変数の参照

式や変数を指定できる SQL プロシージャー・ステートメント中のどこでも、 SQL パラメーター、SQL 変数、およびグローバル変数を参照できます。

SQL ルーチン、SQL トリガー、または動的コンパウンド・ステートメント中にホスト変数を指定することはできません。 SQL パラメーターはルーチン本体のどこでも参照でき、ルーチン名で修飾できます。 SQL 変数が宣言されているコンパウンド・ステートメント中のどこでも SQL 変数を参照でき、 そのコンパウンド・ステートメントの先頭にラベル名を指定して SQL 変数を修飾できます。 SQL パラメーターまたは SQL 変数に行データ・タイプがある場合、SQL パラメーターまたは SQL 変数を参照できる場所であればどこでもフィールドを参照できます。 グローバル変数は、式が決定論的である必要がない限り、どの式の中でも参照できます。 以下のシナリオでは決定論的式が必要となり、グローバル変数は使用できません。
  • チェック制約
  • 生成列の定義
  • 即時リフレッシュ MQT

SQL パラメーター、SQL 変数、行変数フィールド、およびグローバル変数はすべて NULL 可能と見なされます。 SQL ルーチン中の SQL パラメーター、SQL 変数、行変数フィールド、またはグローバル変数の名前を、そのルーチン中で参照されている表やビューの列名と同じ名前にすることもできます。 SQL 変数または行変数フィールドの名前を、同じルーチンで宣言されている別の SQL 変数または行変数フィールドと同じ名前にすることもできます。 このことは、2 つの SQL 変数が別々のコンパウンド・ステートメントで宣言される場合に生じる可能性があります。 SQL 変数の宣言を含むコンパウンド・ステートメントは、この変数の有効範囲を決定します。 詳しくは、 コンパウンド SQL (コンパイル済み) ステートメントを参照してください。

SQL ルーチン中の SQL 変数または SQL パラメーターの名前を、 特定の SQL ステートメント中で使用されている ID 名と同じ名前にすることもできます。 名前を修飾しない場合は、以下の規則により、 名前が ID、SQL パラメーター、または SQL 変数のいずれであるかが示されます。
  • SET PATH および SET SCHEMA ステートメント中では、 名前は SQL パラメーターまたは SQL 変数として検査されます。 SQL 変数または SQL パラメーターとして検出されない場合は、ID として使用されます。
  • CONNECT、DISCONNECT、RELEASE、および SET CONNECTION ステートメントでは、この名前は ID として使用されます。
同一の名前は明示的に修飾する必要があります。 名前の修飾は、この名前が列、SQL 変数、SQL パラメーター、行変数フィールド、またはグローバル変数を参照するかどうかを明確に示します。 名前を修飾しない場合、または、修飾されていても未確定な場合は、以下の規則により、 名前が列、SQL 変数、SQL パラメーター、またはグローバル変数のいずれであるかが示されます。
  • SQL ルーチン本体で指定されている表やビューが、 そのルーチンの作成時に既存の場合は、名前は最初に列名として検査されます。 列として検出されない場合は、次にコンパウンド・ステートメント内の SQL 変数として検査され、その後 SQL パラメーターとして検査され、そして最後に、グローバル変数として検査されます。
  • 参照されている表やビューが、そのルーチンの作成時に存在しない場合は、 名前は最初にコンパウンド・ステートメント内の SQL 変数として、次に SQL パラメーターとして、次にグローバル変数として検査されます。 変数は、参照を含むコンパウンド・ステートメント内、またはそのようなコンパウンド・ステートメントがネストしているコンパウンド・ステートメント内で宣言しなければなりません。 同一の有効範囲内に 2 つの SQL 変数があって、同一の名前を持つ場合 (この変数が別々のコンパウンド・ステートメント内で宣言されると生じる場合がある)、最も内側のコンパウンド・ステートメントで宣言された SQL 変数が使用されます。 検出されない場合は、列であるとみなされます。