VALUES INTO ステートメント
VALUES INTO ステートメントは、変数に 1 つ以上の値を割り当てます。
呼びかけ VALUES INTO
このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、動的に作成できない実行可能ステートメントです。
承認 VALUES INTO
- ステートメントに指定されたすべての表およびビューに対する SELECT 特権。
- ステートメントに指定されたすべての表およびビューの所有権。
- ステートメントに指定されたすべてのグローバル変数に対する READ および WRITE 特権。
- ステートメントで指定されるグローバル変数の所有権
- データベースに対する DBADM 権限 (表のみ)
- DATAACCESS 権限
- SYSADM 権限
- SYSCTRL 権限 (カタログ表のみ)
グローバル変数、または配列グローバル変数のエレメントへの割り当ての場合、特権セットには、少なくとも次のいずれかが含まれていなければなりません。

- 変数に対する WRITE 特権
- 変数の所有権
- DATAACCESS 権限
- SYSADM 権限

遷移変数への割り当ての場合、特権セットには、少なくとも次のいずれかが含まれていなければなりません。

- 割り当てステートメントを含むトリガーが定義されている表またはビューに対する UPDATE 特権
- 値が割り当てられる遷移変数に対応する列に対する UPDATE 特権
- 割り当てステートメントを含むトリガーが定義されている表またはビューの所有権
- 割り当てステートメントを含むトリガーが定義されている表が含まれているデータベースに対する DBADM 権限
- DATAACCESS 権限
- SYSADM 権限

ステートメントの中で使用される式には、許可が必要です。 詳細は Expressionsを参照。
特権セット:
特権セットとは、パッケージのオーナーが持つ特権のことである。
VALUES INTOの構文
説明の対象: VALUES INTO
- VALUES
- 1 つ以上の列からなる単一行をこの後に指定します。 複数の値を指定する場合には、その値を括弧で囲む必要があります。
- 式
式は、「 式 」で説明されているタイプの式であれば何でもよい。 式に、列名を組み込むことはしないでください。
- NULL
- NULL 値。 NULL 関連する指示変数を持つホスト変数に対してのみ指定できます。
- INTO target-variable または array-variable[array-index]
- 出力値の割り当てのための 1 つ以上のターゲットを示します。 INTO 文節内のターゲットの数は、割り当てられる値の数と同じでなければなりません。 結果行の最初の値はリスト中の最初のターゲット、その次の値は 2 番目のターゲット、以下同様に割り当てられます。 INTO 文節内でターゲット変数を複数回指定してはなりません。 ターゲットへの各割り当ては、 割り当てと比較で説明したルールに従って、リストを通して順番に行われる。
結果列の値の数よりもターゲットの数の方が少ない場合には、SQLCA の SQLWARN3 フィールドに値「W」が割り当てられます。
いずれかの割り当てでエラーが発生すると、エラーが発生したターゲットに値は割り当てられず、それ以上、指定されたターゲットに値は割り当てられません。 既に割り当てられている値はすべて、割り当てられたままとなります。
- global-variable-name
- 割り当てのターゲットとなるグローバル変数を指定します。
- ホスト変数名
- 割り当てのターゲットとなるホスト変数を指定します。 LOB 出力値の場合、ターゲットとして可能なのは正規のホスト変数 (十分な大きさの場合)、LOB ロケーター変数、または LOB ファイル参照変数です。
- SQL-parameter-name
- 割り当てのターゲットとなるパラメーターを識別します。
- SQL-variable-name
- 割り当てターゲットである SQL 変数を識別します。 SQL 変数は、使用する前に宣言しておかなければなりません。
遷移変数名
FL 500 遷移テーブルで更新される列を識別します。 transition-variable-nameは、トリガのサブジェクトテーブルの列を識別しなければなりません。
- 配列変数 [配列インデックス ]
- 代入のターゲットである配列エレメントを指定します。
ステートメントに common-table-expression も指定されている場合、配列エレメントを代入のターゲットとして指定することはできません。
- array-variable
- 配列変数を指定します。
- [array-index ]
- 配列のどのエレメントが割り当てのターゲットであるかを指定する式。
通常の配列の場合、添字式は INTEGER にキャスト可能でなければならず、NULL 値にすることはできません。 添字の値は、1 から、その配列に定義されている最大カーディナリティーまでの値でなければなりません。
連想配列の場合、配列添字の式は、その連想配列の添字のデータ・タイプにキャスト可能でなければならず、NULL 値であってはなりません。
array-index は、以下のものであってはなりません。
- CURRENT DATE、CURRENT TIME、または CURRENT TIMESTAMP 特殊レジスターを参照する式
- 非 deterministic 関数
- EXTERNAL ACTION を指定して定義された関数
- MODIFIES SQL DATA を指定して定義された関数
- シーケンス式
注釈 VALUES INTO
- ターゲットへの割り当て:
INTO 節によって識別される n 番目のターゲットは、カーソルの結果表の n 番目の列に対応します。 ターゲットのデータ・タイプは、対応する値と互換性がなければなりません。 値が数値の場合、ターゲットにはその値の整数部分を表すだけの容量がなければなりません。 datetime値の場合、ターゲットは「 datetime値の文字列表現 」で定義されている最小の長さの文字列変数でなければならない。 代入される値がNULLの場合、ターゲット変数には指示変数を指定しなければならない。
割り当ては、リストされている順に行われます。 ターゲットへの各割り当ては、 SQLの言語要素で説明したルールに従って行われる。 ターゲットの数が行の中の値の数よりも少ない場合は、SQLCA の SQLWARN3 フィールドは W に設定されます。 ターゲットの数が結果列の数より多い場合、警告は出されません。 ターゲット変数に NULL 値を割り当てる場合は、標識変数を指定する必要があります。 割り当てエラーが発生すると、値はターゲットに割り当てられず、値はそれ以上ターゲットに割り当てられません。 それまでに既にターゲットに割り当てられていた値はそのままになります。 ただし、LOB 値が含まれている場合、対応するターゲットが変更されている可能性はありますが、その変数の中身は予測できません。
同じ割り当てステートメントに割り当てが複数含まれる場合は、すべての expressions を評価してから割り当てが実行されます。 例えば、式内の変数への参照は、常時、割り当てステートメント内のどの割り当てよりも前の変数の値を使用します。
通常、LOB 列に対してデータの割り当てと取り出しを行うには、LOB ロケーターを使用します。 ただし、互換性規則により、LOB ロケーターを使用して他のデータ・タイプのターゲットにデータを割り当てることもできます。 ロケータの使用方法の詳細については、「LOB ロケータを使用して LOB を操作する際のストレージの節約 」を参照してください。
- デフォルトのコード化スキーム:
- このデータのデフォルトのコード化スキームは、バインド・オプション ENCODING にある値です。このオプションは、アプリケーションのエンコードのためのものです。 このステートメントが LOB ロケーター上で稼働する関数 (LENGTH または SUBSTRING など) と共に使用されている場合で、 かつそのロケーターで指定された LOB データが ENCODING バインド・オプションとは異なるコード化スキームにある場合、 LOB マテリアライズと文字変換が起こります。 LOB マテリアライズと文字変換を防止するには 、SYSIBM.SYSDUMMYA、SYSIBM.SYSDUMMYE、または SYSIBM.SYSDUMMYU サンプル表か ら LOB データを選択します。
例 VALUES INTO
EXEC SQL VALUES(CURRENT PATH)
INTO :HV1; EXEC SQL VALUES(CURRENT MEMBER)
INTO :MEM; EXEC SQL VALUES (SUBSTR(:LOB1,1,35))
INTO :DETAILS; EXEC SQL SELECT SUBSTR(:LOB1,1,35)
INTO :DETAILS
FROM SYSIBM.SYSDUMMYU;VALUES INTVAR1 INTO MYINTARRAY1[INTCOL2+MYINTVAR+1];