SET 遷移変数

SET 遷移変数ステートメントは、新しい遷移変数に値を割り当てます。

呼び出し

このステートメントは、BEFORE トリガー内の SQL ステートメントとしてのみ使用できます。 これは実行可能ステートメントですが、動的に準備することはできません。

権限

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

構文

構文図を読む構文図をスキップする
        .-,------------------------------------------------------------------------.   
        V                                                                          |   
>>-SET----+-transition-variable-- = --+-expression-+-----------------------------+-+-><
          |                           +-NULL-------+                             |     
          |                           '-DEFAULT----'                             |     
          |    .-,-------------------.               .-,--------------.          |     
          |    V                     |               V                | (1)      |     
          '-(----transition-variable-+--)-- = --(--+---+-expression-+-+-----+--)-'     
                                                   |   +-NULL-------+       |          
                                                   |   '-DEFAULT----'       |          
                                                   |                (2)     |          
                                                   '-row-fullselect---------'          

注:
  1. 、NULL、および DEFAULT の数は、遷移変数 の 数と同じでなければなりません。
  2. 選択リストの中の列の数は、遷移変数 の数と一致していなければなりません。

説明

transition-variable
新しい行の中のどの列を更新するかを指定します。 遷移変数 は、トリガーの対象表の中の列を示すものでなければ ならず、必要に応じて、新しい値を示す相関名により修飾することができます。 OLD 遷移変数 を指定してはなりません。

遷移変数 は、SET 遷移変数ステートメントで 1 回しか識別することができません。

遷移変数 のデータ・タイプは、それぞれに対応する結果列 と互換性のあるものでなければなりません。 値は、ストレージ割り当て規則に従って遷移変数 に割り当てられます。 詳しくは、割り当ておよび比較を参照してください。

expression
遷移変数 の新しい値を指定します。 expression は、で説明したタイプの任意の式です。式には集約関数を含めることはできません。

には、OLD および NEW 遷移変数 に対する参照を 含めることができます。 CREATE TRIGGER ステートメントに OLD 文節と NEW 文節の両方が含まれ ている場合は、遷移変数 への参照を相関名 によって修飾する必要があります。

NULL
NULL 値を指定します。NULL は、NULL 可能列に対してのみ指定できます。
DEFAULT
遷移変数 に関連した列のデフォルト値を使用することを指定します。 この列が IDENTITY 列または行変更タイム・スタンプ列であるか、または ROWID データ・タイプである場合、DEFAULT は使用できません。
row-fullselect
1 つの結果行を戻す全選択。結果列の値は、対応する各遷移変数 に割り当てられます。 全選択の結果に行が含まれない場合、NULL 値が割り当てられます。 結果の中に複数の行がある場合には、エラーが戻されます。

複数の割り当て: 複数の割り当てを同一 SET 遷移変数 ステートメント内で指定すると、割り当てを行う前にすべての の評価が行われます。 したがって、式の中での遷移変数 への参照は、常に、この SET ステートメントで割り当てが行われる前の遷移変数 の値です。

例 1: 給与列の値が 50000 を超えないようにします。 新しい値が 50000 より大きい場合は、50000 に設定します。

CREATE TRIGGER LIMIT_SALARY
  BEFORE INSERT ON EMPLOYEE
  REFERENCING NEW AS NEW_VAR
  FOR EACH ROW MODE DB2SQL
  WHEN (NEW_VAR.SALARY > 50000)
    BEGIN ATOMIC
    SET NEW_VAR.SALARY = 50000;
  END 

例 2: 職名が更新されたときに、新しい職名に基づいて給与が増額されるようにします。 そして、その地位での年数を 0 に設定します。

CREATE TRIGGER SET_SALARY
  BEFORE UPDATE OF JOB ON STAFF
  REFERENCING OLD AS OLD_VAR
              NEW AS NEW_VAR
  FOR EACH ROW MODE DB2SQL
  BEGIN ATOMIC
    SET (NEW_VAR.SALARY, NEW_VAR.YEARS) =
        (OLD_VAR.SALARY * CASE NEW_VAR.JOB
            WHEN 'Sales' THEN 1.1
            WHEN 'Mgr'   THEN 1.05
            ELSE 1 END ,0);
  END