COBOLのDELETE文でレコードを削除!初心者でもわかる完全ガイド
生徒
「COBOLで、いらなくなったデータを削除する方法ってありますか?」
先生
「はい、COBOLにはDELETE文という命令があり、それを使えば不要なレコードを削除できますよ。」
生徒
「削除ってなんだか怖そうです…本当に消えるんですか?」
先生
「大丈夫ですよ。一緒に安全な削除のやり方を確認していきましょう!」
1. DELETE文とは?
COBOL(コボル)のDELETE文は、ファイルの中にある特定のレコード(1行のデータ)を削除するための命令です。レコードとは、たとえば「名前・年齢・住所」といった情報をひとまとめにした1セットのデータのことです。
この命令を使うと、「もう使わないデータ」や「古くなったデータ」をファイルから取り除くことができます。
つまり、COBOLでデータを管理しているときに、必要な情報だけを残して、不要なものを消すためにDELETE文を使います。
2. レコードを削除する流れをイメージしよう
削除処理の流れはとてもシンプルで、以下のステップで実行されます:
- ファイルを「I-O(読み書き)」モードで開く
READ文で、削除したいレコードを読み込むDELETE文で、そのレコードを削除する
たとえば、書類の中から不要なページを見つけて、シュレッダーにかけるイメージです。
3. DELETE文の基本構文
まずは、COBOLでレコードを削除するための基本的な構文を見てみましょう。
READ ファイル名 RECORD
INVALID KEY
DISPLAY "レコードが見つかりませんでした。"
NOT INVALID KEY
DELETE ファイル名 RECORD
INVALID KEY
DISPLAY "削除に失敗しました。"
END-DELETE
END-READ
READ RECORDというのは、「1件のデータを探して読み込む」という意味です。INVALID KEY(インバリッドキー)は、「探したけど見つからなかった場合」の処理を書きます。
DELETE RECORDは、その読み込んだレコードを削除する命令です。
4. 実際のサンプルプログラム
それでは、削除処理を実際に行うCOBOLのプログラムを見てみましょう。今回は「社員番号EMP002のデータを削除する」という例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. DELETE-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE ASSIGN TO "employee.dat"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS EMP-ID.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE.
01 EMP-REC.
05 EMP-ID PIC X(6).
05 EMP-NAME PIC X(20).
05 EMP-AGE PIC 99.
WORKING-STORAGE SECTION.
01 WS-TARGET-ID PIC X(6) VALUE "EMP002".
PROCEDURE DIVISION.
OPEN I-O EMP-FILE
MOVE WS-TARGET-ID TO EMP-ID
READ EMP-FILE RECORD
INVALID KEY
DISPLAY "社員番号が見つかりません。"
NOT INVALID KEY
DELETE EMP-FILE RECORD
INVALID KEY
DISPLAY "削除できませんでした。"
END-DELETE
END-READ
CLOSE EMP-FILE
STOP RUN.
5. 実行結果のイメージ
ファイル「employee.dat」に次のようなデータが入っているとします。
EMP001 佐藤太郎 30
EMP002 鈴木花子 25
EMP003 高橋健一 28
このプログラムを実行すると、「EMP002」のレコードが削除され、次のようになります。
EMP001 佐藤太郎 30
EMP003 高橋健一 28
6. ファイルは「INDEXEDファイル」でないとDELETEできない
DELETE文が使えるのは、INDEXEDファイル(インデックス付きファイル)だけです。これは、各レコードが「キー(目印)」で管理されている形式のファイルです。
普通の「順次ファイル(SEQUENTIAL FILE)」ではDELETE文は使えません。ですので、DELETE文を使いたいときは、ORGANIZATION IS INDEXEDと指定する必要があります。
7. 「OPEN I-O」の重要性
DELETE文を使うには、ファイルをOPEN I-O(読み書き両用)で開いておく必要があります。これを忘れてOPEN INPUTにしてしまうと、削除できません。
読み取りと書き込みができるようにするため、必ずOPEN I-Oを使いましょう。
8. よくあるエラーとその対処法
- 削除対象が見つからない →
READのキー(検索条件)が正しいか確認しましょう。 - ファイルをSEQUENTIALにしている →
ORGANIZATION IS INDEXEDかどうかを確認してください。 - ファイルがOPEN I-Oで開かれていない → ファイルのOPEN方法を見直しましょう。
このようなポイントを意識すれば、削除処理でつまずくことは減ります。
9. データ削除は慎重に!
DELETE文を実行すると、対象のレコードは完全に削除され、元には戻せません。
そのため、間違って重要なデータを消さないように、「本当に削除してよいのか」を確認する処理を入れることが大切です。
たとえば、削除前に画面にメッセージを表示して確認を求めるような仕組みを入れると安全です。
まとめ
DELETE文でレコードを安全に扱うための総合的な理解
ここまで、COBOLのDELETE文を使ったレコード削除の仕組みや手順について学んできましたが、改めて振り返ると、 削除という処理は単純なようでいて、とても慎重さが求められる重要な操作であることが分かります。特に、 削除対象のレコードを正しく絞り込むためのキー項目の設定、INDEXEDファイルとしてのファイル構造の理解、 READ文によるレコード読み込み時のINVALID KEY判定など、ひとつひとつの流れが正しくつながってはじめて、 安全で確実なレコード削除が成立します。とりわけDELETE文は、一度実行するとデータが元に戻らないため、 処理の正しさを確認しながら慎重に進める姿勢がとても大切です。業務システムで扱う情報は、 社員情報や顧客情報など日々の運用の中で重要な役割を果たすものが多く、それらを取り扱う際に、 「不要になったから削除する」という表面的な判断だけではなく、「本当に今削除してよいのか」という視点を持つことが、 正確で安全なデータ管理につながります。
また、DELETE文を正しく動作させるためには、INDEXEDファイルであること、RECORD KEYが適切に設定されていること、 ファイルをOPEN I-Oで開いていることなど、複数の要素が正しく整っている必要があります。COBOLにおけるファイル処理は、 プログラムとファイル定義が密接に連動しているため、DELETE文だけを覚えても十分ではありません。 ファイルの組織形態(ORGANIZATION)、アクセスモード(ACCESS MODE)、キー項目の定義などを含めて理解すると、 削除処理の動きがより明確に見えてきます。また、削除前にレコード内容をDISPLAYで確認し、 利用者が「削除してよいか」を判断できるメッセージを表示する設計を加えることで、現場で安心して使えるプログラムになります。 実際の業務では、削除処理は運用に大きな影響を与えることがあるため、利用者が最終確認できる設計はとても有効です。 DELETE文をただ実行するだけではなく、周囲の処理や表示内容も含めて検討することが、実務で求められる品質に直結します。
サンプルコードでもう一度削除処理を確認しよう
ここでは、学んだポイントを踏まえたサンプルプログラムを掲載します。削除対象のレコードを読み込み、 内容を確認したうえで「本当に削除するか」を選択する流れを組み込むことで、操作の安全性が高まります。 現場での運用を意識しながら、より実践的な削除処理として参考にしてください。
IDENTIFICATION DIVISION.
PROGRAM-ID. DELETE-CHECK-SAFE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE ASSIGN TO "employee.dat"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS EMP-ID.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE.
01 EMP-REC.
05 EMP-ID PIC X(6).
05 EMP-NAME PIC X(20).
05 EMP-AGE PIC 99.
WORKING-STORAGE SECTION.
01 WS-TARGET-ID PIC X(6) VALUE "EMP005".
01 WS-ANSWER PIC X(01).
PROCEDURE DIVISION.
OPEN I-O EMP-FILE
MOVE WS-TARGET-ID TO EMP-ID
READ EMP-FILE RECORD
INVALID KEY
DISPLAY "対象のレコードは存在しません。"
NOT INVALID KEY
DISPLAY "削除確認:" EMP-ID " " EMP-NAME
DISPLAY "削除しますか?(Y/N)"
ACCEPT WS-ANSWER
IF WS-ANSWER = "Y"
DELETE EMP-FILE RECORD
INVALID KEY
DISPLAY "削除に失敗しました。"
END-DELETE
ELSE
DISPLAY "削除を中止しました。"
END-IF
END-READ
CLOSE EMP-FILE
STOP RUN.
このように、削除前に対象レコードの内容を表示することで、誤削除のリスクを大幅に減らすことができます。 とくに社員番号や顧客番号のように見た目では判断しづらいデータの場合、表示内容による確認は欠かせません。 また、「削除できない理由がINVALID KEYによるものなのか」「I-Oモードで開くのを忘れたのか」「ファイルの組織形態に問題があるのか」 といった原因を切り分ける際にも、削除処理の流れを理解しておくと役に立ちます。DELETE文を使いこなすことは、 ファイル管理全体を深く理解することにもつながり、データ運用の質を大きく向上させます。
先生と生徒の振り返り会話
生徒
「DELETE文ってこんなに多くのことを考えて使うんですね。単に消すだけだと思っていました…!」
先生
「そうなんです。レコードを安全に削除するには、ファイルの種類やキーの設定、削除前の確認など、 たくさんの工夫が必要なんですよ。」
生徒
「確認メッセージを出すだけで、誤った削除を防げるのはとても便利ですね。業務でも役に立ちそうです!」
先生
「実際の現場でも確認はとても大切です。大事な情報を扱うときは、慎重に処理を進める習慣が身につきますよ。」
生徒
「INDEXEDファイルの意味や、OPEN I-Oで開かなければならない理由も理解できました。DELETEの裏ではいろいろな要素が関係しているんですね。」
先生
「その理解があれば、これからの開発でファイル処理に困ることは少なくなるはずですよ。これからも一緒に学んでいきましょう。」