COBOLのDBアクセスパターンを学ぼう!「DELETE」|応用ガイド | 応用ガイド
COBOL(コボル)言語のDB更新処理に利用するDELETE文とは?
COBOL(コボル)言語のDBアクセス「DELETE」とは?
一般的なDBはリレーショナル型データベース(RDB)を指します。RDBは、問い合わせ言語(SQL)を利用してデータにアクセスを行います。これらはDBアクセスを学ぶ上での共通事項です。
今回ご紹介するDELETEはSQLの記述の1つで、指定した検索条件を元にしてDB(テーブル)にアクセスし、検索条件に該当したレコードを削除するという機能を持っています。では、その書き方について見ていきましょう。
書き方:
DELETE FROM テーブル名
WHERE 検索条件
COBOL(コボル)言語のDBアクセス「DELETE」の処理構成
DBアクセスの基本的な処理構成について見ていきましょう。この処理構成を理解する事が今回の処理の理解につながります。
[基本的な処理構成]
1.ホスト変数の定義、2.共通領域の定義、3.データベース接続、4.データベースアクセス
各処理で実施する処理内容は以下の通りです。
1.ホスト変数の定義
COBOL、DB間のデータ連携用の変数を定義します。この変数を利用してDBから取得したデータをCOBOLで加工、編集する事ができるようになります。
2.共通領域の定義
DBのエラー情報が格納されます。エラーハンドリングする際に利用しますが、最初の内はあまり気にする必要はないでしょう。
3.データベース接続
ユーザID、パスワードを指定し、DBと接続します。
4.データベースアクセス
DBの操作(検索、追加、更新、削除など)を行います。今回ご紹介するDELETEもここに記述する事になります。
基本的な処理構成を見ていただければおわかりになるかと思いますが、1.ホスト変数の定義~3.データベース接続はDBアクセスの共通の処理になり、4.データベースアクセスを業務要件に合わせて記述する事で、様々な処理要件に対応する事ができます。では基本的な処理構成について記述したサンプルプログラム(使用例1)を用意しましたので、その書き方について見ていきましょう。
使用例1:
※今回のDBMSは、オープンソースの「PostgreSQL」を使用しています。
※USERNAME、PASSWORDはご自身の環境に合わせて指定ください。
使用例1は、DB(testdb)に、ユーザID、パスワードを指定して接続し、検索条件(tid = '0002')を指定してテーブル(test)を検索し、検索条件に該当したレコードを削除するというプログラムです。
DELETE処理後に記述しているCOMMITは、DBの更新を確定するという意味があります。特に気にせずそのまま記述しておけばいいでしょう。
テーブル(test):処理実行前
実行結果:
テーブル(test):処理実行後
COBOL(コボル)言語のDBアクセス「DELETE」の応用的な使い方COBOL(コボル)言語のDBアクセス「DELETE」の応用的な使い方
DBアクセス及びDELETEの基本的な処理構成と書き方について理解いただけたでしょうか。今度は、応用的な使い方について考えていきましょう。
先ほどご紹介したサンプルプログラムは、指定した条件に一致するDB(テーブル)のレコードを削除するというプログラムでしたが、入力ファイルの値を使ってDBの行を削除するという処理について考えてみましょう。
具体的なサンプルプログラム(使用例2)を用意しましたので、しっかり内容を理解して実際のプログラム作成に活用いただければと思います。
使用例2:
- IDENTIFICATION DIVISION.
- PROGRAM-ID. db_delete_sample02.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT IN01-FILE
- ASSIGN TO "in01.txt"
- ORGANIZATION IS LINE SEQUENTIAL.
- DATA DIVISION.
- FILE SECTION.
- FD IN01-FILE.
- 01 IN01.
- 03 IN01-TID PIC X(04).
- 03 IN01-TNAME PIC X(10).
- WORKING-STORAGE SECTION.
- * 1.ホスト変数の定義
- EXEC SQL BEGIN DECLARE SECTION END-EXEC.
- 01 DBNAME PIC X(32) VALUE "testdb".
- 01 USERNAME PIC X(32) VALUE "********".
- 01 PASSWORD PIC X(32) VALUE "********".
- 01 WK-IN01.
- 03 TID PIC X(4).
- 03 TNAME PIC X(10).
- EXEC SQL END DECLARE SECTION END-EXEC.
- * 2.共通領域の定義
- EXEC SQL INCLUDE SQLCA END-EXEC.
- PROCEDURE DIVISION.
- OPEN INPUT IN01-FILE.
- READ IN01-FILE
- END-READ.
- MOVE IN01 TO WK-IN01.
- * 3.データベース接続
- EXEC SQL
- CONNECT :USERNAME IDENTIFIED BY :PASSWORD
- USING :DBNAME
- END-EXEC.
- * 4.データベースアクセス
- EXEC SQL
- DELETE FROM test
- WHERE tid = :TID
- END-EXEC.
- DISPLAY "DB DELETE END".
- EXEC SQL
- COMMIT
- END-EXEC.
- CLOSE IN01-FILE.
- STOP RUN.
- END PROGRAM db_delete_sample02.
使用例2は、使用例1とほとんど同じような処理の流れになっていますが、入力ファイルの値を利用してDBの削除処理を行う記述をしています。
テーブル(test):処理実行前
入力ファイル(in01.txt):
実行結果:
テーブル(test):処理実行後
練習問題
最後に練習問題にチャレンジしてみましょう。
問題)
先ほどまでのサンプルプログラムは検索条件(WHERE)を指定していました。では、使用例1の検索条件を指定しなかった場合、どのような結果になるでしょうか?実際にプログラムを修正して確認してみましょう。
※テーブル(test)の状態は使用例1と同じとします
答え)
結果はDBの全てのレコードが削除されます。このようにDBの更新処理は検索条件を誤ると思わぬデータの更新を行ってしまう事があります。対象データに絞り込むためにはどういう検索条件にする必要があるか、DBのキー項目などよく確認しながら検索条件を指定するように注意しましょう。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの
求人情報
が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
応募条件
※2020年5月31日を以って、締切りました。
18歳~28歳の方。
正社員採用において、北川社長の著書『祈り方が9割』を読んで感想文を事前に提出すると、無条件で最終面接まで進むことができます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典