VALUES INTO ステートメント
VALUES INTO ステートメントは、 0 行か 1 行から成る結果表を作成して、その行の値をホスト変数に割り当てます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、動的に作成できない実行可能ステートメントです。
許可
このステートメントの許可 ID が保有する特権には、各 expression および row-expression の実行に必要な特権が含まれている必要があります。
assignment-target として使用されるグローバル変数ごとに、以下のいずれかの権限がステートメントの許可 ID によって保持されている必要があります。
- モジュールで定義されていないグローバル変数に対する WRITE 特権
- モジュールで定義されているグローバル変数のモジュールに対する EXECUTE 特権
- モジュールで定義されているグローバル変数のモジュールが含まれているスキーマに対する EXECUTEIN 特権
- モジュールで定義されているグローバル変数のモジュールが含まれているスキーマに対する DATAACCESS 権限
構文
説明
- 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;