このページでは、テーブル(データベース)・内部テーブルからのレコード削除を行うDELETE文について解説しています。
サンプルコード付きで初心者でも理解できるよう分かりやすく解説します。
ABAPエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。
ABAP:DELETE文とは?
DELETEとは日本語で削除するという意す。その名の通り、テーブル(データベース)・内部テーブルから対象のレコードを削除する命令です。
これだけ説明するととても簡単な命令に思えますが、実はテーブルからレコード削除する場合と、内部テーブルからレコード削除を行う場合で構文が多少異なるため、しっかり両者の区別をしておくことが重要です。
まずは、テーブルからのレコード削除を解説します。
DELETE命令:構文ルール①(テーブルからのレコード削除)
DELETE FROM (テーブル名) WHERE (条件式).
指定したテーブルに含まれるレコードからWHERE句で指定した条件に一致するレコードを削除します。
DELETE FROM Z_TABLE WHERE A = '1000' AND B = 'ABCDE'.
上記のサンプルコードではアドオンテーブル「Z_TABLE」のうち、項目Aが「1000」かつ項目Bが「ABCDE」というレコードを削除します。
WHERE条件の記載は、SELECT命令と同じです。
DELETE命令を利用する場合、WHERE条件で削除対象を絞り切ることが重要です。下記のような場合、項目Aが「1000」となっているレコードすべてが削除されてしまうのですが、意図しない削除を行っていしまう例を初心者のうちはしばしば目にします。
DELETE FROM Z_TABLE WHERE A = '1000'.
逆に、テーブルに格納されているデータベースを全件削除したい場合は、以下のようにワイルドカードを用いることができます。
DELETE FROM (テーブル名) WHERE (項目名) LIKE '%'.
ただし、この構文は非常に危険(後戻り不可能)なのであまり用いるのはお勧めしません。あくまでも条件を指定したうえで実行するのがDELETE文の基本です。
SY-SUBRCの値:DELETE文
少なくとも1つの行が削除されればSY-SUBRCには0がセットされます。逆に、1つも削除されなかった場合は4がセットされます。
また、INSERT・UPDATE同様処理に成功した場合(この場合は削除できた場合)、その件数はSY-DBCNTに格納されます。
両者の違いに留意して、設計を心がけましょう。
DELETE命令:構文ルール②(テーブルからのレコード削除)
内部テーブルに格納されているレコードに基き、DELETEする行を指定することも可能です。
DELETE (テーブル名) FROM TABLE (内部テーブル名).
こちらの構文は内部テーブルに格納された値のキー項目と一致するレコードをテーブルから削除する命令です。
SELECT A B C FROM Z_TABLE INTO Z_INT_TABLE WHERE A = '1000'. DELETE Z_TABLE FROM TABLE Z_INT_TABLE.
「Z_INT_TABLE」には項目Aが「1000」のレコードがすべて格納されています。
それらのレコードのキー項目が一致する全てのレコードが「Z_TABLE」から削除される命令です。
先ほどと同様、SY-SUBRCに0がセットされるのは、内部テーブルで指定したレコードが全件正常に処理された場合。一つでも正常に処理がなされなかった場合、SY-SUBRCには4がセットされます。
DELETE命令:構文ルール③(内部テーブルからのレコード削除)
続いて、内部からのレコード削除方法です。
DELETE INT_TABLE WHERE A = '1000'.
テーブルからのレコード削除と異なり、対象の内部テーブルの前に「FROM」を指定する必要がないという点に注目です。
ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!