UPDATE ステートメントを使用した表内のデータの変更

表またはビュー内のデータを更新するには、UPDATE ステートメントを使用します。

UPDATE ステートメントを使用すると、WHERE 文節の検索条件を満たしている各行の 1 つまたは複数の列の値を変更することができます。UPDATE ステートメントを実行すると、WHERE 文節に指定された検索条件を満たす行の数に応じて、表の 0 個以上の行の 1 つまたは複数の列値が変更されます。UPDATE ステートメントの形式は次のとおりです。

   UPDATE 表名
     SET 列 1 = 値 1,
         列 2 = 値 2, ...
     WHERE 検索条件 ...

ある社員が異動になったとします。この移動を反映するように CORPDATA.EMPLOYEE 表を更新するには、以下のステートメントを実行します。

   UPDATE CORPDATA.EMPLOYEE
     SET JOB = :PGM-CODE,
         PHONENO = :PGM-PHONE
     WHERE EMPNO = :PGM-SERIAL

SET 文節は、更新したい各列についての新しい値を指定するために使用します。 SET 文節には、更新したい列名と、変更後の値を指定します。 以下のタイプの値を指定することができます。

以下の UPDATE ステートメントは多数のさまざまな値を使用します。

   UPDATE WORKTABLE
      SET COL1 = 'ASC',
          COL2 = NULL,
          COL3 = :FIELD3,
          COL4 = CURRENT TIME,
          COL5 = AMT - 6.00,
          COL6 = COL7
       WHERE EMPNO = :PGM-SERIAL

更新される行を識別するには、WHERE 文節を使用します。

WHERE 文節は省略することができます。省略すると、表またはビューの各行が、指定した値で更新されます。

データベース・マネージャーが UPDATE ステートメントの実行中にエラーを検出すると、更新を中止して負の SQLCODE を戻します。COMMIT(*ALL)、 COMMIT(*CS)、COMMIT(*CHG)、または COMMIT(*RR) が指定されていると、表内のどの行も変更されません (このステートメントによってすでに変更された行があれば、以前の値に復元されます)。COMMIT(*NONE) が指定されている場合は、すでに変更された行があっても、以前の値に復元されません

データベース・マネージャーが検索条件を満たす行を見つけることができない場合は、+100 の SQLCODE が返されます。

注: UPDATE ステートメントでは、複数の行が更新される可能性があります。 更新された行の数は、SQLCA の SQLERRD(3) に反映されます。 この値は、GET DIAGNOSTICS ステートメントの ROW_COUNT 診断項目からも使用可能です。

さまざまな方法で UPDATE ステートメントの SET 文節を使用し、更新中の各行で設定する実際の値を決定することができます。次の例では、各列とそれに対応する値を示します。

UPDATE EMPLOYEE
  SET WORKDEPT = 'D11',
      PHONENO = '7213',
      JOB = 'DESIGNER'
  WHERE EMPNO = '000270'

すべての列を指定してからすべての値を指定することにより、この UPDATE ステートメントを書き込むこともできます。

UPDATE EMPLOYEE
  SET (WORKDEPT, PHONENO, JOB)
      = ('D11', '7213', 'DESIGNER')
  WHERE EMPNO = '000270'