COBOLのDBアクセスパターンを学ぼう!「DELETE」|応用ガイド | 応用ガイド

COBOL(コボル)言語のDB更新処理に利用するDELETE文とは?

応用-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はご自身の環境に合わせて指定ください。

応用-DELETE-使用例1

使用例1は、DB(testdb)に、ユーザID、パスワードを指定して接続し、検索条件(tid = '0002')を指定してテーブル(test)を検索し、検索条件に該当したレコードを削除するというプログラムです。

DELETE処理後に記述しているCOMMITは、DBの更新を確定するという意味があります。特に気にせずそのまま記述しておけばいいでしょう。

テーブル(test):処理実行前

応用-DELETE-テーブル

実行結果:

応用-DELETE-実行結果

テーブル(test):処理実行後

応用-DELETE-テーブル

COBOL(コボル)言語のDBアクセス「DELETE」の応用的な使い方COBOL(コボル)言語のDBアクセス「DELETE」の応用的な使い方

DBアクセス及びDELETEの基本的な処理構成と書き方について理解いただけたでしょうか。今度は、応用的な使い方について考えていきましょう。

先ほどご紹介したサンプルプログラムは、指定した条件に一致するDB(テーブル)のレコードを削除するというプログラムでしたが、入力ファイルの値を使ってDBの行を削除するという処理について考えてみましょう。

具体的なサンプルプログラム(使用例2)を用意しましたので、しっかり内容を理解して実際のプログラム作成に活用いただければと思います。

使用例2:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. db_delete_sample02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. FILE-CONTROL.
  6. SELECT IN01-FILE
  7. ASSIGN TO "in01.txt"
  8. ORGANIZATION IS LINE SEQUENTIAL.
  9. DATA DIVISION.
  10. FILE SECTION.
  11. FD IN01-FILE.
  12. 01 IN01.
  13. 03 IN01-TID PIC X(04).
  14. 03 IN01-TNAME PIC X(10).
  15. WORKING-STORAGE SECTION.
  16. * 1.ホスト変数の定義
  17. EXEC SQL BEGIN DECLARE SECTION END-EXEC.
  18. 01 DBNAME PIC X(32) VALUE "testdb".
  19. 01 USERNAME PIC X(32) VALUE "********".
  20. 01 PASSWORD PIC X(32) VALUE "********".
  21. 01 WK-IN01.
  22. 03 TID PIC X(4).
  23. 03 TNAME PIC X(10).
  24. EXEC SQL END DECLARE SECTION END-EXEC.
  25.  
  26. * 2.共通領域の定義
  27. EXEC SQL INCLUDE SQLCA END-EXEC.
  28.  
  29. PROCEDURE DIVISION.
  30. OPEN INPUT IN01-FILE.
  31. READ IN01-FILE
  32. END-READ.
  33. MOVE IN01 TO WK-IN01.
  34.  
  35. * 3.データベース接続
  36. EXEC SQL
  37. CONNECT :USERNAME IDENTIFIED BY :PASSWORD
  38. USING :DBNAME
  39. END-EXEC.
  40.  
  41. * 4.データベースアクセス
  42. EXEC SQL
  43. DELETE FROM test
  44. WHERE tid = :TID
  45. END-EXEC.
  46.  
  47. DISPLAY "DB DELETE END".
  48.  
  49. EXEC SQL
  50. COMMIT
  51. END-EXEC.
  52.  
  53. CLOSE IN01-FILE.
  54. STOP RUN.
  55. END PROGRAM db_delete_sample02.

使用例2は、使用例1とほとんど同じような処理の流れになっていますが、入力ファイルの値を利用してDBの削除処理を行う記述をしています。

テーブル(test):処理実行前

応用-DELETE-テーブル

入力ファイル(in01.txt):

応用-DELETE-入力ファイル

実行結果:

応用-DELETE-実行結果

テーブル(test):処理実行後

応用-DELETE-テーブル

練習問題

最後に練習問題にチャレンジしてみましょう。

問題)

先ほどまでのサンプルプログラムは検索条件(WHERE)を指定していました。では、使用例1の検索条件を指定しなかった場合、どのような結果になるでしょうか?実際にプログラムを修正して確認してみましょう。

※テーブル(test)の状態は使用例1と同じとします

答え)

結果はDBの全てのレコードが削除されます。このようにDBの更新処理は検索条件を誤ると思わぬデータの更新を行ってしまう事があります。対象データに絞り込むためにはどういう検索条件にする必要があるか、DBのキー項目などよく確認しながら検索条件を指定するように注意しましょう。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門