本ページでは、テーブル(データベース)からのレコード削除―DELETE文について解説しています。
DELETEはなんか簡単そう!
と思う方も多いかもしれませんが、構文も2種類ありますし、DELETE文はインパクトが大きいので誤った理解をすると大変なことになります・・・
このページでは、DELETE文の構文ルール2種類をそれぞれ解説します。
DELETE文とは?
DELETとは日本語で削除するという意味です。その名の通り、テーブル(データベース)から対象のレコードを削除する命令です。
DELETE文でバグを起こしてしまう(誤ったレコードを削除してしまう)と勿論レコードは元には戻りませんので、最新の注意が必要です。そのため、DELETE文については実行条件を丁寧に理解しておく必要があります。
DELETE文には、以下の2種類の書き方が存在します。


以下では、基本となる構文ルールを確認していきます。
構文ルール(条件指定の場合)
DELETE FROM (テーブル名) WHERE (条件式).
指定したテーブルのうち、WHERE句で指定した条件に一致するレコードを削除します。条件式で指定した対象が複数の場合でも、単一の場合ともに構文ルールは同一です。
SY-SUBRCの値:DELETE文
少なくとも1つの行が削除されれば「SY-SUBRC」には0がセットされます。
逆に、1つも削除されなかった場合は4がセットされます。また、INSERT・UPDATE同様処理に成功した場合(この場合は削除できた場合)、その件数はSY-DBCNTに格納されます。
- SY-SUBRC ⇒ 処理の成功or失敗
- SY-DBCNT ⇒ 処理が成功した場合のレコード数
両者の違いに留意して、設計を心がけましょう。
構文ルール(内部テーブルを使用する場合)
DELETE (テーブル名) FROM TABLE (内部テーブル名).
こちらの構文は内部テーブルに格納された値と一致するレコードをテーブルから削除する命令です。レコードの行全体ではなく、キー項目さえ一致していればレコードを削除することができます。
SY-SUBRCに0がセットされるのは、内部テーブルで指定したレコードが全件正常に処理された場合です。一つでも正常に処理がなされなかった場合、SY-SUBRCには4がセットされます。
+α 全件削除したい場合
テーブルに格納されているデータベースを全件削除したい場合は、ワイルドカードを利用して以下のような構文を用います。
DELETE FROM (テーブル名) WHERE (項目名) LIKE '%'.
項目名に入れるテーブルはなんでもOKです。そこで指定された項目が「いずれの場合でも」削除対象となるためです。
ただし、この構文は非常に危険(後戻り不可能)なのであまり用いるのはお勧めしません。あくまでも条件を指定したうえで実行するのがDELETE文の基本です。
DELETE文についての解説は以上です。実際にDELETE文を記述するときに、本ページで解説した注意点に留意していただけると幸いです。