【ABAP】3分で学ぶUPDATE―レコードの更新

ABAP

本ページでは、テーブル(データベース)レコードの変更・更新するUPDATE文について解説します。

UPDATEは、DBテーブルのレコードを更新する命令です。INSERT文とセットで学習するとより理解が進むかと思いますので、お時間がある方は合わせて以下の記事もご覧ください。

それでは早速解説を始めます。

UPDATE文とは?

UPDATEは英語で「更新」の意味です。この命令を実行すると、条件に合致するテーブルレコードの値が変更されます。

UPDATE文はその目的に応じて、微妙に構文が変わります。

UPDATE文の構文は大きく2分類

処理対象が単一レコードの場合と複数レコードの場合とで、考え方が異なるのでそれぞれの場合に分けて解説を進めます。まずは、単一レコードの場合を解説します。

単一レコードを更新する場合

1つのレコードを更新する場合、①か②の構文を用います。

構文ルール(単一レコードの場合)①

UPDATE (テーブル名) FROM(構造名).


構造に格納されている値でテーブルを更新しにいきます。この際更新されるのはテーブルのキー項目と構造に格納されているキー項目が一致するレコードです。

生徒名簿テーブルで出席番号がキー項目となっているとします。構造に格納する出席番号を「2」とした場合、テーブルのレコードが指定した値に更新されるのは、出席番号が「2」のレコードです。

構造とテーブルは同じ項目を保持する同一の構造でなければなりません。

構文ルール(単一レコードの場合)②

UPDATE (テーブル名)
   SET  (テーブル-項目名)= (構造-項目名)
   WHERE(テーブル-項目名)=(構造-項目名).


こちらの構文は、WHERE句でキー項目を指定し、SETオプションで指定された項目を更新します。この構文は、複数の場合でも利用可能ですが、その分注意も必要です。

構文ルール②を利用した際の注意点

WHERE区でキー項目を指定する、と簡単に説明してしまいましたが、例えばテーブルで定義されているキー項目が複数ある場合において注意が必要です。この場合全ての項目を指定しなければなりません。

もし、WHERE句で性別のみを男で指定していした場合、性別が男である項目すべてが更新されてしまいます。したがって、単一のレコードのみを変更したいのであれば、性別+出席番号をWHERE句で指定するのが正解です。

ビューに対する更新も可能

ビューに対する行更新も可能です。が、INSERT文と同様、対象のビューが①単一のテーブルから構成されていることと、②ビューの設定として「変更可能」になっていることが条件となります。

※ビューについて詳しく知りたい方は以下の記事をご覧ください。

複数レコードを更新する場合

複数レコードを更新する場合は、構文の形は以下の1通りです。

構文ルール(複数レコードの場合)

UPDATE(テーブル名)
  SET   (テーブル-項目名)= (構造-項目名)
  WHERE (テーブル-項目名)= (構造-項目名).


単一レコードの場合の構文ルール②と全く同一です。構文②では、全てのキー項目を指定するとの条件・注意点を解説しましたが、複数のレコードを変更したい場合はそうする必要はありません。

単純に、対象としたいレコードをWHERE句で指定するだけですので簡単です。

システム項目:SY-SUBRC/SY-DBCNT

処理の結果、SY-SUBRCには以下の通りで格納されます。

レコードが(少なくとも1行以上)更新された場合 ⇒ 0

何らかの理由で1行も更新されなかった場合    ⇒ 4

また、更新されたレコード数はINSERT文同様「SY-DBCNT」に格納されます。

※システム項目について知りたい方は、以下のページをご覧ください。

尚、INSERT文とUPDATE文を融合させたような命令がABAPに存在します。MODIFY命令といって「挿入」も「変更」もできてしまう命令があります。

INSERT文、UPDATE文と絡めて学習・整理をすると理解が含まりますので合わせて以下の記事もご覧ください。

タイトルとURLをコピーしました