VALUES INTO

VALUES INTO ステートメントは、1 行以内で構成される結果表を作成し、その行の値を変数に割り当てます。

呼び出し

このステートメントは、 アプリケーション・プログラムに組み込むことができます。これは動的に準備できる 実行可能ステートメントですが、割り当てられるすべての変数がグローバル変数でない場合は対話式に 発行することはできません。REXX または Java™ では指定できません。

権限

行全選択 が指定されている場合、照会で 各副選択に必要な権限についての説明を参照してください。

割り当ての右側にグローバル変数が指定される 場合、ステートメントの権限 ID が保持する特権には以下の 1 つ以上が含まれていなければなりません。

  • グローバル変数に対する WRITE 特権
  • データベース管理者権限

構文

構文図を読む構文図をスキップする
                                                   .-,--------.   
                                                   V          |   
>>-VALUES--+-+-expression-+---------------+--INTO----variable-+-><
           | '-NULL-------'               |                       
           |      .-,--------------.      |                       
           |      V                |      |                       
           '-(--+---+-expression-+-+-+--)-'                       
                |   '-NULL-------'   |                            
                '-row-fullselect-----'                            

説明

VALUES
1 つ以上の列からなる単一行をこの後に指定します。
expression
変数の新しい値を指定します。expression は、で説明したタイプの任意の式です。この式の中で列名を使用してはなりません。ホスト構造体はサポートされません。
NULL
変数の新しい値を NULL 値にすることを指定します。
row-fullselect
1 つの結果行を戻す全選択。結果列の値は、対応する各変数 に割り当てられます。 全選択の結果に行が含まれない場合、NULL 値が割り当てられます。結果の中に複数の行がある場合には、エラーが戻されます。
INTO variable,…
1 つ以上のホスト構造体、あるいは変数を指定します。 これらのホスト構造体や変数は、その宣言の規則に従ってプログラムで宣言する必要があります。 この INTO の操作形式では、ホスト構造体に対する参照は、その個々の変数それぞれに対する参照によって置き換えられます。 指定した最初の値が最初の変数に割り当てられ、 2 番目の値が 2 番目の変数に割り当てられます。以下同様です。

変数の割り当て: 変数への割り当ては、それぞれ 割り当ておよび比較で説明されている検索割り当て規則に従って行われます。1 変数の数が行の中の値の数より少ない場合、 SQL 警告 (SQLSTATE 01503) が戻されます (そして、SQLCA の SQLWARN3 フィールドに 'W' が設定されます)。 結果の列の数よりも変数の数が多い場合には、警告は出されない点に注意してください。 値が NULL の場合は、その値に対して標識変数が用意されている必要があります。

変数として文字変数を指定し、その変数が、結果を収容するのに十分な大きさを持っていない場合には、警告 (SQLSTATE 01004) が戻され (そして SQLCA の SQLWARN1 に 'W' が割り当てられ) ます。 標識変数が用意されている場合、結果の実際の長さが、その変数に関連する標識変数に戻されることがあります。 詳しくは、変数を参照してください。

割り当てでエラーが起こった場合、その値は変数に割り当てられず、 それ以後の変数への値の割り当ては行われません。ただし、変数に既に割り当てられている値があれば、 その値は割り当てられたままです。

変数として C の NUL で終了するホスト変数を指定し、その変数が、 結果および NUL 終了文字を入れられるだけの十分な大きさを持っていない場合は、以下のようになります。

  • CRTSQLCI コマンドまたは CRTSQLCPPI コマンドに *CNULRQD オプションを指定した 場合 (または SET OPTION ステートメントに CNULRQD(*YES) を指定した場合)、以下のようになります。
    • 結果が切り捨てられます。
    • 最後の文字は NUL 終了文字になります。
    • SQLCA の SQLWARN1 に値‘W' が割り当てられます。
  • CRTSQLCI コマンドまたは CRTSQLCPPI コマンドに *NOCNULRQD オプションを指定した 場合 (または SET OPTION ステートメントに CNULRQD(*NO) を指定した場合)、以下のようになります。
    • NUL 終了文字は戻されません。
    • SQLCA の SQLWARN1 に値‘N' が割り当てられます。

結果列の評価に関する考慮事項: 算術式の結果 (ゼロによる除算やオーバーフローなど) または 数値や文字の変換エラーの結果として、 VALUES INTO ステートメントの式リストにある結果列を評価する際にエラーが生じた場合、 結果は NULL 値になります。 他の NULL 値の場合と同様に、標識変数を用意しなければなりません。 該当の変数の値は、未定義になります。ただし、この場合、標識変数は -2 の値にセットされます。 ステートメントの処理は続行して、警告が戻されます。 標識変数が指定されない場合、エラーが戻されて、変数には値が割り当てられなくなります。 エラーが戻されるとき、既にいくつかの値が変数に割り当てられていることがあり、 それらの値は割り当てられたままになります。

日時値が戻されるとき、変数にはその値を完全に保管できるだけの長さが必要です。 長さが不足する場合、切り捨てなければならない値の量に応じて、 警告またはエラーが戻されます。 詳しくは、日時割り当てを参照してください。

複数の割り当て: 複数の変数を INTO 文節で指定すると、割り当てを行う前にすべての が評価されます。したがって、 内の変数 への参照は、常時、VALUES INTO ステートメント内のどの割り当てよりも前の変数 の値です。

例 1: CURRENT PATH 特殊レジスターの値を、ホスト変数 HV1 に割り当てます。

   EXEC SQL VALUES CURRENT PATH
            INTO :HV1;

例 2: LOB ロケーター LOB1 が CLOB 値と関連していると想定します。 CLOB 値の一部を、LOB ロケーターを使用してホスト変数 DETAILS に割り当てて、 CURRENT TIMESTAMP をホスト変数 TIMETRACK に割り当てます。

   EXEC SQL VALUES (SUBSTR(:LOB1,1,35), CURRENT TIMESTAMP)
            INTO :DETAILS, :TIMETRACK;
1 SQL 変数または SQL パラメーターへの割り当て、および標準オプションが指定された場合は、ストレージ割り当て規則が適用されます。 標準オプションについては、標準への準拠を参照してください。