割り当てステートメント

割り当てステートメント は、SQL パラメーターまたは SQL 変数に値を割り当てます。

構文

構文図を読む構文図をスキップする
>>-+--------+--SET--assignment-clause--------------------------><
   '-label:-'                           

assignment-clause:

構文図を読む構文図をスキップする
     .-,-----------------------------------------------------------------------.     
     V                                                                         |     
>>-+---+-+-SQL-parameter-name-+-- = --+-expression-+-------------------------+-+-+-><
   |   | +-SQL-variable-name--+       +-NULL-------+                         |   |   
   |   | '-global-variable----'       '-DEFAULT----'                         |   |   
   |   |    .-,----------------------.               .-,--------------.      |   |   
   |   |    V                        |               V                |      |   |   
   |   '-(----+-SQL-parameter-name-+-+--)-- = --+-(----+-expression-+-+--)-+-'   |   
   |          '-SQL-variable-name--'            |      +-NULL-------+      |     |   
   |                                            |      '-DEFAULT----'      |     |   
   |                                            '-row-fullselect-----------'     |   
   +-array-variable-name--[--array-index--]-- = --+-expression-+-----------------+   
   |                                              '-NULL-------'                 |   
   '-array-variable-name-- = --+-array-constructor---+---------------------------'   
                               +-TRIM_ARRAY function-+                               
                               +-array-variable-name-+                               
                               '-NULL----------------'                               

 行全選択

|--+--------------------------------------------------+--fullselect--|
   |                      .-,-----------------------. |               
   |                      V                         | |               
   '-WITH--+-----------+----common-table-expression-+-'               
           '-RECURSIVE-'                                              

説明

label
割り当てステートメント のラベルを指定します。 このラベル名は、ルーチン名または同じ有効範囲内の別のラベルと同じものにすることはできません。 詳しくは、SQL ラベルの参照を参照してください。
SQL-parameter-name
割り当てのターゲットの SQL パラメーターを識別します。 この SQL パラメーターは、CREATE PROCEDURE ステートメント または CREATE FUNCTION ステートメントの パラメーター宣言 に指定しておく必要があります。
SQL-variable-name
割り当てのターゲットの SQL 変数を識別します。SQL 変数は、複合ステートメント の中で宣言するか、遷移変数にするかのいずれかになります。
変更の始まりglobal-variable変更の終わり
変更の始まり割り当てのターゲットとなるグローバル変数を指定します。変更の終わり
または NULL
割り当てのソースの式または値を指定します。
DEFAULT
遷移変数に関連付けられた列のデフォルト値を使用することを指定しま す。これは、グローバル変数に対して、および SQL トリガー内で遷移変数に 対してのみ指定できます。DEFAULT が使用される場合、SET ステートメントに割り当てることができるグローバル変数は 1 つだけです。
row-fullselect
1 つの結果行を戻す全選択。結果列の値は、対応する SQL 変数またはパラメーターに 割り当てられます。全選択の結果に行が含まれない場合、NULL 値が割り当てられます。 結果の中に複数の行がある場合には、エラーが戻されます。
WITH common-table-expression
共通表式を指定します。共通表式については、共通表式を参照してください。
fullselect
1 つの結果行を戻す全選択。結果列の値は、対応する各変数 に割り当てられます。 全選択 の結果に行が含まれない場合、NULL 値が割り当てられます。結果の中に複数の行がある場合には、エラーが戻されます。
array-variable-name
SQL 変数またはパラメーターを識別します。変数またはパラメーターは、配列タイプでなければなりません。
[array-index]
配列内のどのエレメントを割り当てのターゲットにするかを指定する数値式。配列指標は、ゼロのスケールの厳密な数値タイプでなければならず、NULL にすることはできません。値は、1 から配列で定義されている最大カーディナリティーまでの値でなければなりません。
array-constructor
配列コンストラクターの値を指定します。ARRAY コンストラクターを参照してください。
TRIM_ARRAY 関数
TRIM_ARRAY スカラー関数を指定します。TRIM_ARRAYを参照してください。

割り当て規則: 割り当てステートメント内の割り当ては、割り当ておよび比較で説明されている SQL 検索割り当て規則に準拠する必要があります。1

SET A[idx] = rhs という形式 (A は、配列変数名、idx は、配列指標として使用する式、rhs は、配列タイプとして使用する互換タイプの式) を使用して割り当てる場合は、以下のようにします。
  1. 配列 A が NULL 値の場合は、A に空の配列を設定します。
  2. C を配列 A のカーディナリティーとします。
  3. idxC 以下の場合は、idx で指定する位置の値が rhs の値で置き換えられます。
  4. idxC より大きい場合は、以下のようになります。
    1. i (iC より大きく idx より小さい値) の位置の値が NULL 値に設定されます。
    2. idx の位置の値が rhs の値に設定されます。
    3. A のカーディナリティーが idx に設定されます。

SQL パラメーターを含む割り当て: IN パラメーターは、割り当てステートメント の左側または右側に指定することができます。制御が呼び出し元に戻るときには、IN パラメーターのオリジナル値が 保存されています。 OUT パラメーターは、割り当てステートメント の左側または右側に 指定することができます。 最初の指定時に値を割り当てておかなかった場合、値は NULL になります。 制御が呼び出し元に戻るときに、OUT パラメーターに最後に 割り当てられた値が呼び出し元に戻されます。 INOUT パラメーターの場合、このパラメーターの最初の値は 呼び出し元により決定され、パラメーターに最後に割り当てられた値が 呼び出し元に戻されます。

複数の SQL パラメーターまたは SQL 変数の割り当て: 複数の SQL パラメーターまたは SQL 変数が割り当てステートメント のターゲットとして指定されている場合、割り当てを行う前に割り当てステートメント のターゲットが完全に評価されます。 そのため、ターゲット式での SQL パラメーターまたは SQL 変数への参照は常に、どの割り当てよりも前の SQL パラメーターまたは SQL 変数の値となります。

配列: 配列または配列エレメントへの割り当て の場合、ステートメント内では 1 つの割り当てのみが許可されます。

特殊レジスター: 特殊レジスターの名前 (PATH など) に一致する ID を使用して 変数を宣言した場合は、その変数を区切り文字で囲んで、特殊レジスターに 対する割り当てと区別する必要があります (例えば、PATH という名前の 変数を整数として宣言する場合は、SET "PATH" = 1)。

SQLSTATE および SQLCODE 変数の考慮事項: これらの変数への割り当ては禁止されていません。ただし、割り当ては診断領域に影響を与えることも、条件ハンドラーを活動化することもないので、お勧めしません。割り当てステートメント ごとに、SQLCODE および SQLSTATE がリセットされ、診断領域または SQLCA が初期化されますが、次のような割り当てステートメント については例外です。
  • SQLSTATE または SQLCODE 変数を他の変数に割り当てるもの、または
  • 定数値を SQLSTATE または SQLCODE 変数内に設定するもの。

例 1: SQL 変数の p_salary を 10% 増やします。

  SET p_salary = p_salary + (p_salary * .10)

例 2: SQL 変数の p_salary を NULL 値に設定します。

  SET p_salary = NULL

例 3: SQL 配列変数 p_phonenumbers を固定の番号の配列に設定します。

  SET p_phonenumbers = ARRAY[9055553907, 4165554213, 4085553678]

例 4: SQL 配列変数 p_phonenumbers を、PHONENUMBER 表から取得した番号の配列に設定します。

  SET p_phonenumbers = ARRAY
    [SELECT NUMBER FROM PHONENUMBERS
            WHERE EMPID = 624]

例 5: SQL 配列変数 p_phonenumbers の 1 番目と 10 番目のエレメントに p_mynumber を割り当てます。 1 番目の割り当ての後に、p_phonenumbers のカーディナリティーは 1 になります。2 番目の割り当ての後に、カーディナリティーは 10 になり、2 から 9 までのエレメントには、暗黙的に NULL 値が割り当てられます。

  SET p_phonenumbers[1] = p_mynumber

   SET p_phonenumbers[10] = p_mynumber
1 SQL 変数または SQL パラメーターへの割り当て、および標準オプションが指定される場合、記憶域割り当て規則が適用されます。 標準オプションについては、標準への準拠を参照してください。