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

COBOL(コボル)言語のDBアクセスの基本である「SELECT *」とは?

応用-SELECT-イメージ

COBOL(コボル)言語のDBアクセス「SELECT *」とは?

近年利用されているDBはリレーショナル型のデータベースが主流になっています。データを表形式で管理し、テーブル間の関係性を定義してデータが整理されるというのが特徴です。データのアクセスはSQL(Structured Query Language)という言語を使ってデータの操作や検索を行うことができます。SQLは世界中で広く使われており、ITエンジニアにとっては必須のスキルの1つになっています。

今回ご紹介する「SELECT *」はこのSQLの1つの操作になります。具体的には、指定したテーブルの全てのカラム(列)と全ての行を取得する構文になります。作成したテーブル内の全てのデータを一度に表示したい、取得したい場合に「SELECT *」を使用します。COBOL(コボル)言語でもDBにアクセスする最も基本的な機能になりますので、しっかり使い方を身につけましょう。

書き方:

SELECT * FROMテーブル名

COBOL(コボル)言語のDBアクセス「SELECT *」の処理構成

COBOL(コボル)言語でSQLを利用する際には、データベースに接続するなど共通の処理を実施しておく必要があります。どのようなSQLを使う場合にも必要になりますので、その使い方について理解しましょう。

[DB利用の基本的な処理構成]

 1.ホスト変数の定義、2.共通領域の定義、3.データベース接続、4.データベースアクセス

各処理で実施する処理内容は以下の通りです。

1.ホスト変数の定義

 COBOL、DB間のデータ連携は変数定義した項目を利用する必要があります。この変数を利用してDBから取得したデータをCOBOLで加工、編集して利用する使い方になります。

2.共通領域の定義

 DBで発生したエラー情報を格納する領域です。DB利用で発生したエラーをもとにエラーハンドリングして利用します。直接の処理をここで定義することはありません。

3.データベース接続

 DBにアクセスする際は、ユーザID、パスワードを利用して接続することになります。

 この接続についてもプログラミングして定義しておきます。

4.データベースアクセス

 1~3の準備が整った後、初めてSQL文を記述することができます。今回ご紹介する「SELECT *」はこの領域を利用してプログラミングしていきます。

1.ホスト変数の定義~3.データベース接続はSQLを利用する際は必ず必要になってきますので、一度サンプルを作成して他でも活用できるようにしておきましょう。

では基本的な処理構成について記述したサンプルプログラム(使用例1)を用意しましたので、その書き方について見ていきましょう。

使用例1:

※今回のDBMSは、オープンソースの「PostgreSQL」を使用しています。

※USERNAME、PASSWORDはご自身の環境に合わせて指定ください。(省略します)

応用-SELECTの対応プログラム1-使用例1

テーブル(test):
応用-デバッグの対応プログラム1-使用例2

実行結果:
応用-デバッグの対応プログラム1-実行結果

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

DBアクセス及び「SELECT *」の基本的な処理構成と書き方についてご理解いただけたでしょうか?今度は、応用的な使い方について考えていきましょう。使用例1では触れませんでしたがテーブル操作をする際はテーブルの中にどのような項目があり、データがあるかを意識しておく必要があります。そのテーブルのデータ状態を把握しながらどのデータを抽出するか考えるとSELECTをより活用することができます。使用例1ではテーブルの最初のレコードが取得される結果になりましたが、4レコード目の項目を取得するように修正してみましょう。

使用例2:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. db_select_sample02.
  3. ENVIRONMENT DIVISION.
  4. DATA DIVISION.
  5. WORKING-STORAGE SECTION.
  6. * 1.ホスト変数の定義
  7. EXEC SQL BEGIN DECLARE SECTION END-EXEC.
  8. 01 DBNAME PIC X(32) VALUE "testdb".
  9. 01 USERNAME PIC X(32) VALUE "".
  10. 01 PASSWORD PIC X(32) VALUE "".
  11. 01 TID PIC X(4).
  12. 01 TNAME PIC X(10).
  13. EXEC SQL END DECLARE SECTION END-EXEC.
  14.  
  15. * 2.共通領域の定義
  16. EXEC SQL INCLUDE SQLCA END-EXEC.
  17.  
  18. PROCEDURE DIVISION.
  19. * 3.データベース接続
  20. EXEC SQL
  21.  CONNECT :USERNAME IDENTIFIED BY :PASSWORD
  22.     USING :DBNAME
  23. END-EXEC.
  24.  
  25. * 4.データベースアクセス
  26. EXEC SQL
  27.  SELECT *
  28.  INTO :TID,:TNAME
  29.  FROM test
  30.  WHERE tid = '0004'
  31. END-EXEC.
  32.  
  33. DISPLAY TID TNAME.
  34. STOP RUN.
  35. END PROGRAM db_select_sample02.

テーブル(test):
応用-SELECTの対応プログラム2-使用例

実行結果:
応用-デバッグの対応プログラム2-実行結果

練習問題

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

問題) サンプルプログラムでは検索条件を指定すると該当レコードが取得できることが確認できました。では、検索条件を指定せず「apple」のレコードを取得するにはどのようにSQLを記述すればいいか考えてみましょう。

答え)

SQLにORDER BYを指定します。ORDER BYはテーブルのレコードをソートする機能になります。これを利用して一番テーブルの項目TIDが小さい順にレコードを並び替えることでappleを取得して画面に表示することができるようになります。

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

あなたのCOBOL技術を活かしませんか?

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

COBOL入門のカテゴリー

|  基礎  |  応用  |  勉強  |  試験 |  辞書  |

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