表データの更新

列の値を別の値に変更したり、列の値を完全に除去したりすることができます。

プロシージャー

表のデータを変更するには、UPDATE ステートメントを使用します。
例えば、従業員が再配置されたとします。 その配置転換を反映するため、作業表 YEMP の従業員のデータのうち複数の項目の更新を 行う場合には、以下のようなステートメントを実行します。
UPDATE YEMP
  SET JOB = 'MANAGER ',
  PHONENO ='5678'
  WHERE EMPNO = '000400';

UPDATE ステートメントを使用すると、列の値を NULL に変更することによって、列から値を除去することもできます (行は除去せずに)。

作成済みの一時表にある行は更新できませんが、 宣言済み一時表では更新できます。

SET 文節によって、更新したい列名と、その列に割り当てたい値を指定 します。 SET 文節の列の値は、 以下の項目のいずれかに置き換えることができます。

  • NULL 値

    NULL 値を割り当てる列は、NOT NULL と定義しないでください。

  • 式としては、以下のいずれかの項目を指定できます。
    • 定数
    • スカラー全選択
    • ホスト変数
    • 特殊レジスター
  • デフォルト値。 デフォルトを指定した場合は、Db2対応列が表内でどのように定義されているかに基づいて値を決定します。

さらには、SET 文節内の 1 つ以上の列値を、 全選択によって戻された行の列値に置き換えることができます。

次に、更新する行を指定します。

  • 単一行を更新する場合、1 行だけを指定する WHERE 文節を使用します。
  • 複数行を更新する場合、更新したい行だけを指定する WHERE 文節を使用します。

WHERE句を省略すると、 Db2 はテーブルまたはビュー のすべての行を、あなたが指定した値で更新します。

UPDATE ステートメントの実行中に Db2 がエラーを検出した場合 ( 例えば、列に対して大きすぎる更新値 ) は、更新を停止し、エラーを戻します。 表内の行は変更されません。 変更済みの行がある場合には、以前の値に戻されます。 UPDATE ステートメントが正常であれば、SQLERRD(3) が 設定されて更新された行数が入っています。

UPDATE文の例

  • 以下のステートメントは、従業員番号 000200 の従業員について、欠落しているミドルネームのイニシャルを補い、さらに職種の変更を行うものです。
    UPDATE YEMP
      SET MIDINIT = 'H', JOB = 'FIELDREP'
      WHERE EMPNO = '000200';
  • 次のステートメントは、 部門 D11 内の全員の給与を 400.00 引き上げます。 このステートメントによって、複数の行を更新することができます。
    UPDATE YEMP
      SET SALARY = SALARY + 400.00
      WHERE WORKDEPT = 'D11';
  • 次のステートメントは、従業員 000190 の給与を平均給与に設定して、ボーナスを全従業員の最低ボーナスに設定します。
    UPDATE YEMP
      SET (SALARY, BONUS) = 
      (SELECT AVG(SALARY), MIN(BONUS) 
        FROM EMP)
       WHERE EMPNO = '000190';