VALUES INTO ステートメント

VALUES INTO ステートメントは、 0 行か 1 行から成る結果表を作成して、その行の値をホスト変数に割り当てます。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、動的に作成できない実行可能ステートメントです。

許可

このステートメントの許可 ID が保有する特権には、各 expression および row-expression の実行に必要な特権が含まれている必要があります。

assignment-target として使用されるグローバル変数ごとに、以下のいずれかの権限がステートメントの許可 ID によって保持されている必要があります。
  • モジュールで定義されていないグローバル変数に対する WRITE 特権
  • モジュールで定義されているグローバル変数のモジュールに対する EXECUTE 特権
  • モジュールで定義されているグローバル変数のモジュールが含まれているスキーマに対する EXECUTEIN 特権
  • モジュールで定義されているグローバル変数のモジュールが含まれているスキーマに対する DATAACCESS 権限

構文

Read syntax diagramSkip visual syntax diagramVALUESexpression(,expression)row-expressionINTO,assignment-target

assignment-target

Read syntax diagramSkip visual syntax diagram global-variable-namehost-variable-nameSQL-parameter-nameSQL-variable-nametransition-variable-namearray-variable-name[array-index]field-reference

説明

VALUES
1 つ以上の列からなる単一行をこの後に指定します。
expression
1 つの列からなる結果表の単一値を定義する式。
1 つまたは複数の列からなる結果表の値を定義する 1 つまたは複数の式。
行式
値の新規行を指定します。 row-expression は、『行式』で説明されているタイプの任意の行式です。 row-expression に列名を含めることはできません。
INTO 割り当て-ターゲット
出力値の割り当てのための 1 つ以上のターゲットを示します。

結果行の最初の値はリスト中の最初のターゲット、その次の値は 2 番目のターゲット、以下同様に割り当てられます。 assignment-target への個々の割り当ては、リストに指定された順序で行われます。 割り当てでエラーが発生した場合、値はassignment-targetに割り当てられません。

すべての assignment-target のデータ・タイプが行タイプではない場合、assignment-targets の数が結果列の値の数より少ないと、SQLCA の SQLWARN3 フィールドに値「W」が割り当てられます。

assignment-target のデータ・タイプが行タイプの場合は、assignment-target を 1 つだけ指定し (SQLSTATE 428HR)、列の数が行タイプ内のフィールドの数に一致し、またフェッチされる行の列のデータ・タイプが行タイプの対応するフィールドに割り当て可能である必要があります (SQLSTATE 42821)。

assignment-target のデータ・タイプが配列エレメントの場合は、assignment-target を正確に 1 つだけ指定する必要があります。

グローバル変数名 (global-variable-name)
割り当てのターゲットとなるグローバル変数を指定します。
ホスト変数名 (host-variable-name)
割り当てのターゲットとなるホスト変数を指定します。 LOB 出力値の場合、ターゲットとして可能なのは正規のホスト変数 (十分な大きさの場合)、LOB ロケーター変数、または LOB ファイル参照変数です。
SQL パラメーター名 (SQL-parameter-name)
割り当てのターゲットとなる名前パラメーターを指定します。
SQL 変数名 (SQL-variable-name)
割り当てターゲットである SQL 変数を識別します。 SQL 変数は、使用する前に宣言しておかなければなりません。
遷移変数名 (transition-variable-name)
遷移行で更新する列を識別します。 transition-variable-name は、新しい値を識別する相関名によってオプションで修飾されている、トリガーのサブジェクト表にある列を識別していなければなりません。
配列変数名 (array-variable-name)
配列タイプの SQL 変数、SQL パラメーター、またはグローバル変数を指定します。
[array-index]
配列のどのエレメントが割り当てのターゲットとなるかを指定する式。 通常配列の場合、array-index 式は INTEGER に割り当て可能でなければならず (SQLSTATE 428H1)、NULL 値にすることはできません。 その値は、1 と、配列に定義された最大カーディナリティーとの間でなければなりません (SQLSTATE 2202E)。 連想配列の場合、array-index 式は連想配列の指標データ・タイプに割り当て可能でなければならず (SQLSTATE 428H1)、NULL 値にすることはできません。
フィールド参照
割り当てのターゲットとなる行タイプ値内のフィールドを指定します。 field-reference は、修飾子がこのフィールドが定義されている行の値を識別する場合、修飾の field-name として指定する必要があります。

ルール

  • コンパウンド SQL (コンパイル済み) ステートメントで定義されていないトリガーの内部、コンパウンド SQL (コンパイル済み) ステートメントで定義されていない関数の内部、メソッドの内部、またはコンパウンド SQL (インライン化) ステートメントの内部で、グローバル変数の割り当てを行うことはできません (SQLSTATE 428GX)。

  • 例 1: この C の例では、CURRENT PATH 特殊レジスターの値を検索してホスト変数に入れます。
       EXEC SQL VALUES(CURRENT PATH)
                INTO :hvl;
  • 例 2: この C の例では、LOB フィールドの一部を検索してホスト変数に入れます。 LOB ロケーターを使用して、据え置き検索を実行します。
       EXEC SQL VALUES (substr(:locator1,35))
                INTO :details;
  • 例 3 この C の例では、SESSION_USER 特殊レジスターの値を検索してグローバル変数に入れます。
       EXEC SQL VALUES(SESSION_USER)
         INTO GV_SESS_USER;