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 文節には、更新したい列名と、変更後の値を指定します。 以下のタイプの値を指定することができます。
- 列名。列の現行値を同じ行内の別の列の内容で置換します。
- 定数。 列の現行値を SET 文節に指定した値で置換します。
- ヌル値。 キーワード NULL を使用して、列の現行値をヌル値で置換します。列は、表の作成時にヌル値可能として定義されていなければなりません。そうでなければ、エラーが発生します。
- ホスト変数。 列の現行値をホスト変数の内容で置換します。
- グローバル変数。 列の現行値をグローバル変数の内容で置換します。
- 特殊レジスター。 列の現行値を特殊レジスターの値 (例えば、USER) で置換します。
- 式。 列の現行値を式の結果の値で置換します。
- スカラー全選択。列の現行値を副照会で戻した値で置換します。
- DEFAULT キーワード。列の現行値を列のデフォルト値で置換します。 列は、その列用に定義されたデフォルト値を持つか、またはヌル値可能でなければなりません。 そうでなければ、エラーが発生します。
以下の UPDATE ステートメントは多数のさまざまな値を使用します。
UPDATE WORKTABLE
SET COL1 = 'ASC',
COL2 = NULL,
COL3 = :FIELD3,
COL4 = CURRENT TIME,
COL5 = AMT - 6.00,
COL6 = COL7
WHERE EMPNO = :PGM-SERIAL
更新される行を識別するには、WHERE 文節を使用します。
- 1 つの行を更新するには、1 つの行だけを選択する WHERE 文節を使用してください。
- 複数の行を更新するには、更新したい行だけを選択する WHERE 文節を使用してください。
WHERE 文節は省略することができます。省略すると、表またはビューの各行が、指定した値で更新されます。
データベース・マネージャーが UPDATE ステートメントの実行中にエラーを検出すると、更新を中止して負の SQLCODE を戻します。COMMIT(*ALL)、 COMMIT(*CS)、COMMIT(*CHG)、または COMMIT(*RR) が指定されていると、表内のどの行も変更されません (このステートメントによってすでに変更された行があれば、以前の値に復元されます)。COMMIT(*NONE) が指定されている場合は、すでに変更された行があっても、以前の値に復元されません。
データベース・マネージャーが検索条件を満たす行を見つけることができない場合は、+100 の SQLCODE が返されます。
さまざまな方法で 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'