ABAP

【ABAP】3分で学ぶMODIFY―行の変更/挿入

本ページでは、テーブルレコードの編集or挿入処理であるMODIFY命令について解説します。

今回は、DB操作の「MODIFY文」について解説していきます。

このページを理解するために以下の2つの命令についての知識が必要です

  1. INSERT命令
  2. UPDATE命令

学ぶ順番としては、①INSERT命令⇒②UPDATE命令⇒このページがお勧めです。以下にINSERT命令とUPDATE命令について解説した記事を載せておきます。

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

MODIFY命令とは?

MODIFY文は簡単に言うと、INSERT文とUPDATE文を融合させた命令です。MODIFYとは日本語で「修正する」という意味になりますが、この命令をうまく使い分けることで、レコードの挿入、もしくは変更を同じ命令で行うことが可能になります。

構文ルールと処理の内容を確認していきましょう。

構文ルール:MODIFY

構文は処理の対象が単一レコードである場合と複数レコードである場合とで異なります。

単一レコードの場合―MODIFY

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


複数レコードの場合―MODIFY

MODIFY (テーブル名) FROM TABLE (内部テーブル名).


処理対象が単一か複数か構文が変わるのは、FROM句の後ろです。

単一の場合は、FROMの後に直接構造名を指定するのに対し、複数の場合はFROM TABELと続けて内部テーブル名を指定します。間違いやすいポイントなので、両者の区別には注意が必要です。

「構造」と「内部テーブル」の違いについてはこちらから

MODIFY文の処理内容

ページ冒頭で、「MODIFY文はINSERT文とUPDATE文が融合した命令である」と説明しました。基本的には、MODIFY文一つで、INSERT⇒レコードの挿入もできますし、UPDATE⇒レコードの更新も可能です。

何を基準にして、動作が変わるか?

MODIFY文は、対象レコードの存在有無によって異なります

対象のレコードがあればUPDATE文と同様の処理を行い

対象のレコードがない場合はINSERT文と同様の処理を行う

ようになります。また、INSERT文、UPDATE文同様ビューに対しても操作を行うことができます。

※もちろん、ビューが変更可能で定義されており、かつ単一のテーブルからなる項目で構成されていることが条件です。

SY-SUBRCに設定される値

指定した値が全て正常に処理(挿入、もしくは変更)された場合「0」がセットされます。一方、1つでも正常に処理がなされない場合は「4」がセットされることになります。

ここまでで、MODIFY文についての解説は終わりです。

質問です!
MODIFY文さえあれば、INSERT文やUPDATE文はいらないのでは・・・・?

補足して、解説します。実際のプログラム開発時には、INSERT文やUPDATE文のみでロジックが成り立つようにし、MODIFY文の利用は避ける必要があります。

MODIFY文の利用シーンと、MODIFYを避けるべき理由を補足

MODIFYの利用シーン

誰もが疑問に思う通り、MODIFY文じゃなくてもINSERTやUPDATEで良いのでは?となりますよね。ですが、例えば以下の場合はINSERT文やUPDATEで代用できるでしょうか?

例)クライアントから以下のような要件を希望されている場合

”画面から初めてレコードを登録する場合はユーザ名を新規登録するが、後からデータの修正を行う場合はユーザ名を上書きする” ようにしてほしい。”

この場合、プログラム初回登録時はINSERTになりますが、2度目以降はUPDATEですね。こういう場合、MODIFYが便利に利用できます。

こういう「仕方がない場合」のみMODIFY文を利用します。MODIFY文には大きな欠点があります。

MODIFYの注意点

MODIFYを多用する場合、処理速度が「非常に遅くなる」というデメリットが存在します。INSERTだけ、UPDATEだけのプログラムの方が断然早いです。

したがって、MODIFY文を利用したいようなシーンでも、できるだけ利用をさけたほうがよいでしょう。INSERT文、UPDATE文で代用できないかを考えることがABAPerの腕の見せどころです。

MODIFYについては、設計段階から利用しない方針で検討する理由があります。