割り当てステートメント
割り当てステートメント は、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
- 配列 A が NULL 値の場合は、A に空の配列を設定します。
- C を配列 A のカーディナリティーとします。
- idx が C 以下の場合は、idx で指定する位置の値が rhs の値で置き換えられます。
- idx が C より大きい場合は、以下のようになります。
- i (i は C より大きく idx より小さい値) の位置の値が NULL 値に設定されます。
- idx の位置の値が rhs の値に設定されます。
- 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 変数を他の変数に割り当てるもの、または
- 定数値を 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
