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

ABAP

本ページでは、内部テーブル/DBテーブルのレコード更新を行うUPDATE命令の使い方を初心者向けに解説します。

UPDATE命令は、内部テーブル、DBテーブルどちらのレコードでも更新することが可能な命令です。本ページでは、サンプルコード付きで、実際のUPDATE命令の使い方を理解できるようできるだけ分かりやすく解説します。

このページで学べる内容
  • UPDATE命令の構文ルール
  • UPDATE命令の使い方・書き方
  • UPDATE命令の注意点

ABAPエンジニアを目指す方であれば、知らないと恥ずかしい超基本知識です。是非最後までご覧ください。

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

スポンサーリンク
スポンサーリンク

UPDATE命令の基本

アプリケーション, 携帯電話, のアプリケーション電話, スマートフォン, モバイルアプリ, 更新

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

UPDATE命令は、WHERE句に指定する条件によって、レコードが複数件更新されたり、1レコードのみが更新されたり、初心者の方にとっては注意が必要な場合があります。

また、UPDATE命令自体も書き方が2通り存在しているので少し混乱してしまうかもしれません。できるだけ整理して、解説していきますので丁寧に理解しておきましょう。

UPDATE命令:WHERE句で条件指定する方法

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


WHERE句で指定した条件に合致するレコードを、SET句に記述した内容で更新(UPDATE)します。

 UPDATE
     Y001
 SET
     ZZ_NAME1    = <LDT_Y001>-ZZ_CD "ユーザコード"
     ZZ_NAME2    = SPACE              "ブランク"
   WHERE
     ZZ_CD = <LDT_Y001>-ZZ_CD.

この書き方が、更新する条件と、更新する内容が一目でわかるため一番ポピュラーな書き方です。複数レコードに対する処理を行いたい場合は、LOOP命令と組み合わせて利用する場合が多いです。

 LOOP AT LT_Y001 ASSIGNING <LT_Y001>.

   CNT = CNT + 1.

   UPDATE
     Y001
   SET
     NAME1     = <LT_Y001>-ZZCD
     NAME2     = SPACE
   WHERE
     ZZCD = <LT_Y001>-ZZCD.

   IF SY-SUBRC <> 0.
     FLG_ERR = 'X'.
     EXIT.

   ELSE.
*    1000件ずつコミット
     IF CNT = 1000.
       COMMIT WORK.
       CLEAR CNT.
     ENDIF.

   ENDIF.

 ENDLOOP.

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

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

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

注意点:WHERE句での条件漏れ

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

もし、WHERE句で性別項目を「男」と指定していした場合、性別が「男」に合致する項目すべてが更新されてしまいます。

したがって、単一のレコードのみを変更したいのであれば、性別+出席番号をWHERE句で指定するのが正解です。WHERE句に指定する条件に不足があると、条件に合致するレコードが複数になり、それらすべてが更新されてしまう点に注意しましょう。

逆に言えば、複数レコードを一気に変更したい場合には、この特性を生かすことも可能。

使い方次第で、条件指定が柔軟に行えます。

UPDATE命令―構造の値で上書きする方法

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


このように記述すると、構造に格納されている値でテーブルを上書きするようになります。この際、更新されるのはテーブルのキー項目と構造に格納されているキー項目が一致するレコードです。

分かりやすいように説明すると、例えば生徒名簿テーブルで出席番号がキー項目となっているとします。構造に格納されている出席番号が「2」の場合、テーブルのレコード更新されるのは、出席番号が「2」のレコードとなるということです。

   UPDATE
     Y001
   FROM
     LS_Y001

ただし、ご覧のようにこの記述方法だと、更新する内容や更新条件がわかりづらくなってしまいます。そのため、あまり利用されることはありません。

リターンコードの値

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

更新されたレコード数はINSERT命令同様「SY-DBCNT」に格納されます。UPDATE命令の結果をいくつかのレコードずつに分けてコミットしたい場合などに使う場合もありますので合わせて覚えておきましょう。

MODIFY命令との違いについて

尚、INSERT文とUPDATE文を融合させたような命令がABAPに存在します。MODIFY命令も、内部テーブル・DBテーブル上にレコードを追加する処理を行う場合があります。

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

ABAPを1から勉強したい方は

ABAPを1から学習したい方のために、ABAPの基本知識・基礎概念を1つのページにまとめました。

現在、完全無料で公開しておりますので、是非ご覧ください!

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