カテゴリ: COBOL 更新日: 2025/12/04

COBOLのDELETE文でレコードを削除!初心者でもわかる完全ガイド

DELETE文でレコードを削除する方法
DELETE文でレコードを削除する方法

先生と生徒の会話形式で理解しよう

生徒

「COBOLで、いらなくなったデータを削除する方法ってありますか?」

先生

「はい、COBOLにはDELETE文という命令があり、それを使えば不要なレコードを削除できますよ。」

生徒

「削除ってなんだか怖そうです…本当に消えるんですか?」

先生

「大丈夫ですよ。一緒に安全な削除のやり方を確認していきましょう!」

1. DELETE文とは?

1. DELETE文とは?
1. DELETE文とは?

COBOL(コボル)のDELETE文は、ファイルの中にある特定のレコード(1行のデータ)を削除するための命令です。レコードとは、たとえば「名前・年齢・住所」といった情報をひとまとめにした1セットのデータのことです。

この命令を使うと、「もう使わないデータ」や「古くなったデータ」をファイルから取り除くことができます。

つまり、COBOLでデータを管理しているときに、必要な情報だけを残して、不要なものを消すためにDELETE文を使います。

2. レコードを削除する流れをイメージしよう

2. レコードを削除する流れをイメージしよう
2. レコードを削除する流れをイメージしよう

削除処理の流れはとてもシンプルで、以下のステップで実行されます:

  1. ファイルを「I-O(読み書き)」モードで開く
  2. READ文で、削除したいレコードを読み込む
  3. DELETE文で、そのレコードを削除する

たとえば、書類の中から不要なページを見つけて、シュレッダーにかけるイメージです。

3. DELETE文の基本構文

3. 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. 実際のサンプルプログラム

4. 実際のサンプルプログラム
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. 実行結果のイメージ

5. 実行結果のイメージ
5. 実行結果のイメージ

ファイル「employee.dat」に次のようなデータが入っているとします。


EMP001 佐藤太郎       30
EMP002 鈴木花子       25
EMP003 高橋健一       28

このプログラムを実行すると、「EMP002」のレコードが削除され、次のようになります。


EMP001 佐藤太郎       30
EMP003 高橋健一       28

6. ファイルは「INDEXEDファイル」でないとDELETEできない

6. ファイルは「INDEXEDファイル」でないとDELETEできない
6. ファイルは「INDEXEDファイル」でないとDELETEできない

DELETE文が使えるのは、INDEXEDファイル(インデックス付きファイル)だけです。これは、各レコードが「キー(目印)」で管理されている形式のファイルです。

普通の「順次ファイル(SEQUENTIAL FILE)」ではDELETE文は使えません。ですので、DELETE文を使いたいときは、ORGANIZATION IS INDEXEDと指定する必要があります。

7. 「OPEN I-O」の重要性

7. 「OPEN I-O」の重要性
7. 「OPEN I-O」の重要性

DELETE文を使うには、ファイルをOPEN I-O(読み書き両用)で開いておく必要があります。これを忘れてOPEN INPUTにしてしまうと、削除できません。

読み取りと書き込みができるようにするため、必ずOPEN I-Oを使いましょう。

8. よくあるエラーとその対処法

8. よくあるエラーとその対処法
8. よくあるエラーとその対処法
  • 削除対象が見つからないREADのキー(検索条件)が正しいか確認しましょう。
  • ファイルをSEQUENTIALにしているORGANIZATION IS INDEXEDかどうかを確認してください。
  • ファイルがOPEN I-Oで開かれていない → ファイルのOPEN方法を見直しましょう。

このようなポイントを意識すれば、削除処理でつまずくことは減ります。

9. データ削除は慎重に!

9. データ削除は慎重に!
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の裏ではいろいろな要素が関係しているんですね。」

先生

「その理解があれば、これからの開発でファイル処理に困ることは少なくなるはずですよ。これからも一緒に学んでいきましょう。」

カテゴリの一覧へ
新着記事
New1
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New2
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New3
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
New4
COBOL
COBOLの帳票出力を完全攻略!数値項目のカンマ・小数点編集例を徹底解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法
No.8
Java&Spring記事人気No8
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決