カテゴリ: COBOL 更新日: 2026/03/01

COBOLのINSERT文の使い方完全ガイド!初心者でもわかるデータベースへのデータ登録

INSERT文の埋め込み方法と注意点
INSERT文の埋め込み方法と注意点

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

生徒

「先生、COBOLでデータベースに新しいデータを追加するにはどうすればいいですか?」

先生

「それにはINSERT文を使います。INSERT文は、テーブルに新しい行を追加するためのSQL文です。」

生徒

「具体的にはどう書けばいいんですか?」

先生

「COBOLではEXEC SQLを使ってSQL文を埋め込みます。値を直接書く場合もありますが、通常はホスト変数を使って安全に値を渡します。」

1. INSERT文とは?

1. INSERT文とは?
1. INSERT文とは?

INSERT文は、データベースのテーブルに新しい行を追加するためのSQL文です。テーブルとは、エクセルの表のように行と列で構成されたデータの集まりです。INSERT文を使うことで、社員情報や顧客情報など、新しいデータを簡単に登録できます。

2. COBOLでのINSERT文の埋め込み方法

2. COBOLでのINSERT文の埋め込み方法
2. COBOLでのINSERT文の埋め込み方法

COBOLでは、SQL文をEXEC SQLEND-EXECの間に記述します。値を直接書くこともできますが、ホスト変数を使うことで、プログラム内の変数の値を安全にSQL文に渡すことができます。


WORKING-STORAGE SECTION.
01  EMP-ID    PIC 9(4) VALUE 1004.
01  EMP-NAME  PIC X(30) VALUE "田中太郎".
01  DEPT      PIC X(10) VALUE "営業部".

PROCEDURE DIVISION.
    EXEC SQL
        INSERT INTO EMPLOYEE (EMPLOYEE_ID, EMPLOYEE_NAME, DEPARTMENT)
        VALUES (:EMP-ID, :EMP-NAME, :DEPT)
    END-EXEC.

この例では、ホスト変数:EMP-ID:EMP-NAME:DEPTの値をEMPLOYEEテーブルに追加しています。

3. ホスト変数を使うメリット

3. ホスト変数を使うメリット
3. ホスト変数を使うメリット

ホスト変数を使うと、値を直接SQL文に埋め込むより安全です。直接文字列や数字を埋め込むと、SQLインジェクションなどのセキュリティリスクが高まります。ホスト変数を使うことで、プログラム内の変数を安全にSQL文に渡せます。また、複数回INSERTを行う場合も、変数の値を変えるだけで簡単に処理できます。

4. INSERT文を使う際の注意点

4. INSERT文を使う際の注意点
4. INSERT文を使う際の注意点
  • テーブルに必須項目がある場合、必ず値を指定する。
  • 重複する主キーをINSERTするとエラーになるので、IDの管理には注意。
  • ホスト変数の型とテーブルの列の型を合わせる。
  • SQLCODEを確認してINSERTが成功したかを判断する。

5. 実践例:社員情報の登録

5. 実践例:社員情報の登録
5. 実践例:社員情報の登録

WORKING-STORAGE SECTION.
01  EMP-ID    PIC 9(4) VALUE 1005.
01  EMP-NAME  PIC X(30) VALUE "佐藤花子".
01  DEPT      PIC X(10) VALUE "開発部".

PROCEDURE DIVISION.
    EXEC SQL
        INSERT INTO EMPLOYEE (EMPLOYEE_ID, EMPLOYEE_NAME, DEPARTMENT)
        VALUES (:EMP-ID, :EMP-NAME, :DEPT)
    END-EXEC.

    IF SQLCODE = 0
        DISPLAY "登録成功:" EMP-NAME
    ELSE
        DISPLAY "登録失敗:" SQLCODE
    END-IF.

登録成功:佐藤花子

この例では、開発部に新しい社員を登録し、SQLCODEを確認して成功かどうかを表示しています。INSERT文の基本を理解すれば、COBOLでのデータベース登録処理が安全かつ簡単に行えます。

6. 初心者向けのポイント

6. 初心者向けのポイント
6. 初心者向けのポイント

COBOLでINSERT文を使うときは、ホスト変数を活用すること、必須項目を必ず埋めること、SQLCODEで結果を確認することを意識してください。最初は小さいテーブルで試しながら理解を深めると、データベースへの登録処理をスムーズに覚えられます。

まとめ

まとめ
まとめ

ここまで、COBOLにおけるINSERT文の基礎から実践的な活用方法まで詳しく解説してきました。現代のシステム開発において、データベース操作は欠かせない要素ですが、特に長年企業の基幹システムを支え続けているCOBOL(コボル)とDB2などのリレーショナルデータベース(RDB)の連携は、非常に強固で信頼性の高いものとなっています。

データベース登録の重要キーワード:INSERT文の振り返り

プログラムからデータベースに新しいレコード(行)を追加する際には、SQLの「INSERT INTO」句を使用します。COBOLプログラムの中でこれらを実行する場合、通常のCOBOL文法とは異なり、EXEC SQLから始まりEND-EXECで閉じるという独自のブロックで囲む必要があります。これを埋め込みSQL(Embedded SQL)と呼び、COBOLコンパイラがSQL文を認識できるようにするための仕組みです。

特に重要なのは、プログラム内のデータ項目をSQL側に渡すための「ホスト変数」の使い方です。変数名の前に「:(コロン)」を付けるというルールは、初心者が最初につまずきやすいポイントですが、これをマスターすることでプログラムから動的にデータを登録できるようになります。

開発現場で求められるエラーハンドリングとSQLCODE

実際の業務システム開発において、ただデータを登録するだけでは不十分です。「一意制約違反(重複エラー)」や「型不一致」、「データベース接続エラー」など、発生しうるトラブルを未然に防ぐ、あるいは発生した際に対処するコードを書くことがプロフェッショナルには求められます。そのために必須となるのがSQLCODEのチェックです。

  • SQLCODE = 0: 正常終了。データが正しく1件追加されました。
  • SQLCODE = -803: 一意制約違反。既に同じ主キー(IDなど)を持つデータが存在します。
  • SQLCODE = -407: 非ヌル制約違反。必須項目にデータがセットされていません。

これらの数値をIF文で判定し、ユーザーに適切なメッセージを表示する、あるいはログを出力するという一連の流れをセットで覚えるようにしましょう。

C#との比較で見るモダンなデータアクセス

COBOLだけでなく、現代的な言語であるC#(シーシャープ)での実装イメージも見てみましょう。C#ではADO.NETやEntity Frameworkといったライブラリを使用してデータベースにアクセスしますが、根本的な「INSERT文の構造」は同じです。


// C#におけるパラメータクエリ(ホスト変数に近い概念)を用いた登録例
using (var connection = new SqlConnection(connectionString))
{
    string sql = "INSERT INTO EMPLOYEE (EMPLOYEE_ID, EMPLOYEE_NAME) VALUES (@id, @name)";
    SqlCommand command = new SqlCommand(sql, connection);
    command.Parameters.AddWithValue("@id", 1006);
    command.Parameters.AddWithValue("@name", "渡辺次郎");

    connection.Open();
    int result = command.ExecuteNonQuery();

    if (result > 0)
    {
        Console.WriteLine("データの登録に成功しました。");
    }
}

上記のC#コードでも、SQL文の中に直接値を書き込むのではなく、@id@nameといったプレースホルダを使用しています。これはCOBOLのホスト変数(:EMP-IDなど)と同じく、セキュリティを守るための重要な技術です。

実戦的なサンプルプログラム:エラー処理付きINSERT

より現場に近い形のCOBOLプログラム例を紹介します。入力データが不足していないかを確認し、実行結果を詳細に判定する構成です。


IDENTIFICATION DIVISION.
PROGRAM-ID. DB-REGIST-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
* データベース接続用の領域
    EXEC SQL INCLUDE SQLCA END-EXEC.

* ホスト変数の定義
01  H-EMP-DATA.
    05  H-EMP-ID       PIC 9(04).
    05  H-EMP-NAME     PIC X(30).
    05  H-DEPT-NAME    PIC X(10).

PROCEDURE DIVISION.
MAIN-PROCESS.
    * 登録するデータのセット
    MOVE 2001        TO H-EMP-ID
    MOVE "佐藤健一"   TO H-EMP-NAME
    MOVE "総務部"     TO H-DEPT-NAME

    * INSERT実行
    EXEC SQL
        INSERT INTO EMPLOYEE (
            EMPLOYEE_ID,
            EMPLOYEE_NAME,
            DEPARTMENT
        ) VALUES (
            :H-EMP-ID,
            :H-EMP-NAME,
            :H-DEPT-NAME
        )
    END-EXEC.

    * 結果判定
    EVALUATE TRUE
        WHEN SQLCODE = 0
            DISPLAY "【正常】社員情報を登録しました:" H-EMP-NAME
            EXEC SQL COMMIT END-EXEC
        WHEN SQLCODE = -803
            DISPLAY "【エラー】既に登録済みの社員IDです:" H-EMP-ID
            EXEC SQL ROLLBACK END-EXEC
        WHEN OTHER
            DISPLAY "【致命的エラー】SQLCODE:" SQLCODE
            EXEC SQL ROLLBACK END-EXEC
    END-EVALUATE.

    STOP RUN.

実行結果は以下のようになります。


【正常】社員情報を登録しました:佐藤健一

このプログラムでは、処理が成功した場合にはCOMMIT(確定)を、失敗した場合にはROLLBACK(取り消し)を行っています。これはデータベースの整合性を守るために欠かせない「トランザクション管理」の一環です。INSERT文を覚える際は、この確定と取り消しの概念も併せて習得することをお勧めします。

先生と生徒の振り返り会話

生徒

「先生、今回のINSERT文の解説で、COBOLでのデータベース操作がすごくイメージできました!SQL文をそのまま書くだけじゃなくて、EXEC SQLで囲むのがCOBOLの決まりなんですね。」

先生

「その通り。よく理解できたね。特にホスト変数を使うときに、変数名の前にコロン(:)を付けるのを忘れないように。これを忘れるとコンパイラが『これはSQLのキーワードなのか、プログラムの変数なのか』を判断できなくなってしまうんだ。」

生徒

「あと、最後に見せてもらったサンプルにあったCOMMITROLLBACKについても気になりました。INSERT文を投げただけじゃ、まだデータは完全に保存されていないということですか?」

先生

「いいところに気づいたね!銀行の振り込み処理などを想像してみて。自分の口座からお金を引いて、相手の口座に足す。この2つの処理が両方成功して初めて完了だよね。もし途中でエラーが起きたら、全部なかったことにしないといけない。それがROLLBACK。正しく終わったから保存していいよ、と合図するのがCOMMITなんだ。」

生徒

「なるほど!INSERT文ひとつとっても、システムの安全性を守るために色んな工夫がされているんですね。エラーコードのSQLCODEも、しっかり暗記しておこうと思います。」

先生

「その意気だ。特に現場ではエラーが起きたときに『なぜ動かないのか』を解析する能力が求められる。SQLCODEはデータベースからの貴重なメッセージだから、それを受け取って正しく判断できるようになれば、一人前のエンジニアに一歩近づけるよ。次はデータの更新(UPDATE)や削除(DELETE)にも挑戦してみようか。」

生徒

「はい、頑張ります!まずは今回のINSERT文を自分の環境で動かして、わざとエラーを出したりして挙動を確かめてみます!」

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのファイル入出力のエラーと解決策まとめ!初心者向けやさしく解説
New2
COBOL
COBOLのジョブ実行ログ管理と監視方法を徹底解説!バッチ運用の基本
New3
C#
C#のnullとNullable型とは?初心者向けにnull許容型の基本と使い方を徹底解説!
New4
C#
C#のエラーと例外の基本!初心者がよく出会うエラーとその対処法まとめ
人気記事
No.1
Java&Spring記事人気No1
COBOL
COBOLのバッチ処理とは?基本構成と役割を初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
COBOL
COBOLのコンパイラと開発環境を徹底解説!初心者にもわかりやすい入門ガイド
No.4
Java&Spring記事人気No4
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.7
Java&Spring記事人気No7
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法
No.8
Java&Spring記事人気No8
C#
C#のasyncとawaitの基本的な使い方をマスターしよう!非同期処理をやさしく解説