SQL 解説書

SET transition-variable

SET transition-variable ステートメントは、新しい変換変数に値を割り当てます。 これは、トランザクションによる制御下にあります。

呼び出し

このステートメントは、 細分性が FOR EACH ROW の BEFORE トリガーのトリガー・アクションで、 トリガーにより実行される SQL ステートメントとしてのみ 使用することができます (CREATE TRIGGER を参照してください)。

許可

トリガーの作成者の許可 ID の特権には、 以下の特権の少なくとも 1 つが含まれていなければなりません。

割り当ての右辺に row-fullselect (行全選択) の指定がある このステートメントを実行する場合には、 トリガー作成者の許可 ID に与えられている特権には、 参照される表または視点のそれぞれに対する特権として、 以下の少なくとも 1 つが含まれていなければなりません。

構文

>>-SET---------------------------------------------------------->
 
      .-,--------------------------------------------------------------------------------------.
      V                                                                                        |
>--------+-|  transition-variable |--=--+-expression-+--------------------------------------+--+>
         |                              +-NULL-------+                                      |
         |                              '-DEFAULT----'                                      |
         |    .-,---------------------------.               .-,--------------------.        |
         |    V                             |               V              (1)     |        |
         '-(-----|  transition-variable |---+---)--=--(--+----+-expression------+--+-+---)--'
                                                         |    +-NULL------------+    |
                                                         |    '-DEFAULT---------'    |
                                                         |                (2)        |
                                                         '-row-fullselect------------'
 
>--------------------------------------------------------------><
 
 transition-variable
 
|---+-------------------+--column-name-------------------------->
    '-correlation-name.-'
 
>-----+--------------------------+------------------------------|
      |  .--------------------.  |
      |  V                    |  |
      '----..attribute-name---+--'
 

注:

  1. 式、NULL、および DEFAULT の数は、 transition-variable (変換変数) の数と同じでなければなりません。

  2. 選択リストの列の数は、 transition-variable の数と同じでなければなりません。

説明

transition-variable
トリガーの影響を受ける一連の行の列を指定します。

correlation-name
新しい (NEW) 変換変数を参照するための相関名。 この相関名 は、 CREATE TRIGGER の REFERENCING 文節の NEW の後に指定した相関名と同じでなければなりません。

その REFERENCING 文節に OLD が指定されていない場合、 相関名 のデフォルト値は NEW の後に指定した相関名 になります。 REFERENCING 文節に NEW と OLD の両方が指定されている場合は、 各列名 ごとに相関名 の指定が必要になります (SQLSTATE 42702)。

column-name
更新する列を指定します。 column-name (列名) は、 トリガーの対象表の列を指定していなければなりません (SQLSTATE 42703)。 1 つの列を 2 回以上指定することはできません (SQLSTATE 42701)。

..attribute name
設定されている構造タイプの属性 (属性割り当て という) を指定します。 指定される column-name は、 ユーザー定義構造タイプで定義されているものでなければなりません (SQLSTATE 428DP)。 attribute-name は、 column-name の構造タイプの属性でなければなりません (SQLSTATE 42703)。 ..attribute name 文節と関係のない割り当ては、 通常の割り当てとみなされます。

expression
列の新しい値を指定します。 この expression (式) として、 で説明されているタイプの式はいずれも使用することができます。 スカラー全選択に現れる式を除き、 この式に列関数を含めることはできません (SQLSTATE 42903)。 expression には、 OLD および NEW の変換変数への参照を含めることができますが、 どの変換変数かを指定するために、 correlation-name (相関名) で修飾する必要があります (SQLSTATE 42702)。

NULL
ヌル値を指定します。 これはヌル値可能な列に対してのみ指定することができます (SQLSTATE 23502)。 NULL が特に属性のデータ・タイプにキャストされたのでない限り、 属性割り当ての値として NULL を使用することはできません (SQLSTATE 429B9)。

DEFAULT
対応する列の表における定義方法に基づくデフォルト値を使用することを指定します。 挿入される値は、その列の定義方法によって異なります。

row-fullselect
割り当て式に指定した列名 の数に対応する数の列を含む 1 つの行を戻す全選択です。 値は、それぞれ対応する列名に割り当てられます。 この行全選択 の結果の行がない場合は、NULL 値が割り当てられます。 row-fullselect (行全選択) には、 OLD および NEW の変換変数に対する参照を含めることができます。 そのような場合、 使用する変換変数を相関名 で修飾して指定する必要があります (SQLSTATE 42702)。 結果に複数の行が含まれる場合には、エラーになります (SQLSTATE 21000)。

規則

例 1: 現在トリガー・アクションが実行されている行の給与の列を 50000 に設定します。

  SET NEW_VAR.SALARY = 50000;
または
  SET (NEW_VAR.SALARY) = (50000);
例 2: 現在トリガー・アクションが実行されている行の給与と歩合の列を、 それぞれ 50000 および 8000 に設定します。

  SET NEW_VAR.SALARY = 50000, NEW_VAR.COMM = 8000;
または
  SET (NEW_VAR.SALARY, NEW_VAR.COMM) = (50000, 8000);
例 3: 現在トリガー・アクションが実行されている行の給与と歩合の列を、 更新される行の部門の従業員の平均給与および平均歩合にそれぞれ設定します。

  SET (NEW_VAR.SALARY, NEW_VAR.COMM)
     = (SELECT AVG(SALARY), AVG(COMM)
          FROM EMPLOYEE E
          WHERE E.WORKDEPT = NEW_VAR.WORKDEPT);
例 4: 現在トリガー・アクションが実行されている行の給与と歩合の列を、 それぞれ 10000、および元の給与値 (つまり SET ステートメントの実行前の) に設定します。

  SET NEW_VAR.SALARY = 10000, NEW_VAR.COMM = NEW_VAR.SALARY;
または
  SET (NEW_VAR.SALARY, NEW_VAR.COMM) = (10000, NEW_VAR.SALARY);


脚注:

106
計算に先立って、元の値がソース・タイプにキャストされることはありません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]