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

COBOL(コボル)言語のDBから指定した行を取り出す「WHERE」とは?

応用-WHERE-イメージ

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

リレーショナル型のデータベースに対して、特定の条件に合致するレコードを抽出する際には「WHERE」句を使用します。SELECT、UPDATE、DELETE文と共に利用され、条件式を指定することで、必要なデータの身を操作対象とすることができます。条件式には比較演算子(=、!=、>、< など)や論理演算子(AND、OR、NOT)を使用することができ、複雑な条件を組み合わせることも可能です。COBOL(コボル)言語でもDBにアクセスする際によく利用する機能になりますので、しっかり使い方を身につけましょう。

書き方:

SELECT * FROM テーブル名 WHERE 項目名 = xx

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

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

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

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

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

1.ホスト変数の定義

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

2.共通領域の定義

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

3.データベース接続

 DBにアクセスする際は、ユーザID、パスワードを利用して接続することになります。 この接続についてもプログラミングして定義しておきます。

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

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

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

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

使用例1:

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

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

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

テーブル(test):
応用-WHEREの対応プログラム1-実行結果1

実行結果:
応用-WHEREの対応プログラム1-実行結果2

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

DBアクセス及び「WHERE」句の基本的な処理構成と書き方についてご理解いただけたでしょうか?今度は、応用的な使い方について考えていきましょう。使用方法にも記載しましたが「WHERE」句は比較演算子や論理演算子、条件を複数指定することができます。テーブルのデータ状態を把握しながらどういった条件のレコードを抽出するか考えていただき、WHERE句の指定方法を学んでみましょう。

使用例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 TID,TNAME
  28.  INTO :TID,:TNAME
  29.  FROM test
  30.  WHERE TID = '0002' AND TNAME = 'orange'
  31. END-EXEC.
  32. DISPLAY TID TNAME.
  33.  
  34. EXEC SQL
  35.  SELECT TID,TNAME
  36.  INTO :TID,:TNAME
  37.  FROM test
  38.  WHERE TID > '0003'
  39. END-EXEC.
  40. DISPLAY TID TNAME.
  41. STOP RUN.
  42. END PROGRAM db_select_sample02.

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

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

練習問題

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

問題) サンプルプログラムではSELECT文に対して検索条件を指定すると該当レコード1件が取得できることが確認できました。では、検索条件から複数件のレコードを取得したい場合、どのような対応をすればいいか考えてみましょう。

答え)

SELECT文では複数件のレコードを一度に取得することができません。複数件のレコードが返却されることがわかっている場合には、「FETCH」文を利用します。「FETCH」は複数件のレコードが返却された場合、どの返却行に対して何の処理を行うか指定ができます。別の講座にて紹介していますので合わせて内容確認してみましょう。

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

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

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

COBOL入門のカテゴリー

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

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