本ページでは、テーブルレコードの編集or挿入処理であるMODIFY命令について解説します。
今回は、DB操作の「MODIFY文」について解説していきます。
このページを理解するために以下の2つの命令についての知識が必要です。
- INSERT命令
- 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については、設計段階から利用しない方針で検討する理由があります。