トランザクション・ファイルを使用した基本的な照会プログラムの例

図 131 に、ILE COBOL TRANSACTION ファイルを使用した基本的な照会プログラムに関連する DDS を示します。

図 131. 単一のディスプレイ装置を使用した TRANSACTION 照会プログラムの例
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
      A* CUSTOMER MASTER INQUIRY FILE ** CUSMINQ
      A*
      A                                      REF(CUSMSTP)
      A          R CUSPMT                    TEXT('CUSTOMER PROMPT')
      A                                      CA01(15 'END OF PROGRAM')
      A                                  1  3'CUSTOMER MASTER INQUIRY'
      A                                  3  3'CUSTOMER NUMBER'
      A            CUST      R        I  3 20
      A  99                                  ERRMSG('CUSTOMER NUMBER NOT FOUND +
      A                                      PRESS RESET, THEN ENTER A VALID NU+
      A                                      MBER' 99)
      A  98                                  ERRMSG('EOF CONDITION IN READ, +
      A                                      PROGRAM ENDED' 98)
      A                                  5  3'USE F1 TO END PROGRAM, USE ENTE+
      A                                      R TO RETURN TO PROMPT SCREEN'
      A          R CUSFLDS                   TEXT('CUSTOMER DISPLAY')
      A                                      CA01(15 'END OF PROGRAM')
      A                                      OVERLAY
      A                                  8  3'NAME'
      A            NAME      R           8 11
      A                                  9  3'ADDRESS'
      A            ADDR      R           9 11
      A                                 10  3'CITY'
      A            CITY      R          10 11
      A                                 11  3'STATE'
      A            STATE     R          11 11
      A                                 11 21'ZIP CODE'
      A            ZIP       R          11 31
      A                                 12  3'A/R BALANCE'
      A            ARBAL     R          12 17

このプログラムが使うディスプレイ装置ファイル (CUSMINQ) のデータ記述仕様 (DDS) は、2 つのレコード様式 (CUSPMT および CUSFLDS) を記述します。

CUSPMT レコード様式には、ディスプレイ装置を識別する 'CUSTOMER MASTER INQUIRY' (得意先マスター照会) という固定情報が含まれています。 また、'CUSTOMER NUMBER' (得意先番号) というプロンプトと、得意先番号を入力する入力フィールド (CUST) も含まれています。 ディスプレイ装置において得意先番号を入力する CUST 入力フィールドの下に、5 つの下線が表示されます。 以下のエラー・メッセージも、このレコード様式に含まれています。

Customer number not found

このメッセージは、プログラムによって、標識 99 が ON に設定されると表示されます。 さらに、このレコード様式では、プログラムを終了させるために押すことのできるファンクション・キーを定義しています。 ファンクション・キー F1 を押すと、ILE COBOL プログラム中で標識 15 が ON に設定されます。 次いでこの標識が、プログラムを終了させるために使用されます。

CUSFLDS レコード様式には、次の固定情報が含まれています。

これらの定数は、プログラムから書き込まれるフィールドを識別します。 このレコード様式では、これらの定数に対応するフィールドも記述されています。 それらのフィールドにはプログラムがデータを入れるため、すべて出力フィールドとして記述されています (位置 38 がブランク)。 したがって、これらのフィールドにはデータを記入できません。 別の得意先番号を入力するには、このレコードに応答して実行キーを押します。 CUSFLDS レコードは CUSPMT レコードに OVERLAY していることに注意してください。 そのため、CUSFLDS レコードがディスプレイ装置に書き出されるとき、CUSPMT レコードはディスプレイ装置上にそのまま残ります。

ディスプレイ装置用に固定情報、フィールド、および属性を記述することに加えて、 レコード様式は、定数やフィールドが表示される水平位置と行番号も定義します。

注:
フィールド属性は、ディスプレイ・ファイルの DDS 中で定義されるのではなく、 フィールド参照の目的で使用される物理ファイル (CUSMSTP) 中で定義されます。
図 132. レコード様式 CUSMST のデータ記述仕様
  ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....
      A* THIS IS THE CUSTOMER MASTER FILE ** CUSMSTP
      A
      A
      A                                      UNIQUE
      A          R CUSMST                    TEXT('CUSTOMER MASTER RECORD')
      A            CUST           5          TEXT('CUSTOMER NUMBER')
      A            NAME          25          TEXT('CUSTOMER NAME')
      A            ADDR          20          TEXT('CUSTOMER ADDRESS')
      A            CITY          20          TEXT('CUSTOMER CITY')
      A            STATE          2          TEXT('STATE')
      A            ZIP            5 00       TEXT('ZIP CODE')
      A            SRHCOD         6          TEXT('CUSTOMER NUMBER SEARCH CODE')
      A            CUSTYP         1 00       TEXT('CUSTOMER TYPE 1=GOV 2=SCH +
      A                                      3=BUS 4=PVT 5=OT')
      A            ARBAL          8 02       TEXT('ACCOUNTS REC. BALANCE')
      A            ORDBAL         8 02       TEXT('A/R AMT. IN ORDER FILE')
      A            LSTAMT         8 02       TEXT('LAST AMT. PAID IN A/R')
      A            LSTDAT         6 00       TEXT('LAST DATE PAID IN A/R')
      A            CRDLMT         8 02       TEXT('CUSTOMER CREDIT LIMIT')
      A            SLSYR         10 02       TEXT('CUSTOMER SALES THIS YEAR')
      A            SLSLYR        10 02       TEXT('CUSTOMER SALES LAST YEAR')
                 K CUST

このプログラムが使うデータベース・ファイルのデータ記述仕様 (DDS) は、1 つのレコード様式 CUSMST を記述しています。 レコード様式中の各フィールドが記述されており、CUST ファイルがレコード様式のキー・フィールドとして指定されています。

図 133. 単一のディスプレイ装置を使用した TRANSACTION 照会プログラムのソース・リスト
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/INQUIRY         ISERIES1   06/02/15 14:57:34        ページ    2
                                     ソ ー ス
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     000100 IDENTIFICATION DIVISION.
     2     000200 PROGRAM-ID.     INQUIRY.
           000300*    SAMPLE TRANSACTION INQUIRY PROGRAM USING 1 DISPLAY DEVICE
           000400
     3     000500 ENVIRONMENT DIVISION.
     4     000600   CONFIGURATION SECTION.
     5     000700 SOURCE-COMPUTER. IBM-ISERIES.
     6     000800 OBJECT-COMPUTER. IBM-ISERIES.
     7     000900   INPUT-OUTPUT SECTION.
     8     001000   FILE-CONTROL.
     9     001100     SELECT CUST-DISPLAY
    10     001200         ASSIGN TO WORKSTATION-CUSMINQ
    11     001300       ORGANIZATION IS TRANSACTION
    12     001400         CONTROL-AREA IS WS-CONTROL.
    13     001500     SELECT CUST-MASTER
    14     001600         ASSIGN TO DATABASE-CUSMSTP
    15     001700         ORGANIZATION IS INDEXED
    16     001800         ACCESS IS RANDOM
    17     001900             RECORD KEY IS CUST OF CUSMST
    18     002000         FILE STATUS IS CM-STATUS.
           002100
    19     002200 DATA DIVISION.
    20     002300 FILE SECTION.
    21     002400 FD  CUST-DISPLAY.
    22     002500 01  DISP-REC.
           002600     COPY DDS-ALL-FORMATS OF CUSMINQ.
    23    +000001       05  CUSMINQ-RECORD PIC X(80).                                          <-ALL-FMTS
          +000002*  INPUT FORMAT:CUSPMT     FROM FILE CUSMINQ    OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000003*                          CUSTOMER PROMPT                                    <-ALL-FMTS
    24    +000004       05  CUSPMT-I      REDEFINES CUSMINQ-RECORD.                            <-ALL-FMTS
    25    +000005           06 CUSPMT-I-INDIC.                                                 <-ALL-FMTS
    26    +000006                07 IN15             PIC 1  INDIC 15.                          <-ALL-FMTS
          +000007*                          END OF PROGRAM                                     <-ALL-FMTS
    27    +000008                07 IN99             PIC 1  INDIC 99.                          <-ALL-FMTS
          +000009*                          CUSTOMER NUMBER NOT FOUND PRESS RESET, THEN ENT    <-ALL-FMTS
    28    +000010                07 IN98             PIC 1  INDIC 98.                          <-ALL-FMTS
          +000011*                          EOF CONDITION IN READ, PROGRAM ENDED               <-ALL-FMTS
    29    +000012           06 CUST                  PIC X(5).                                 <-ALL-FMTS
          +000013*                  CUSTOMER NUMBER                                            <-ALL-FMTS
          +000014* OUTPUT FORMAT:CUSPMT     FROM FILE CUSMINQ    OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000015*                          CUSTOMER PROMPT                                    <-ALL-FMTS
    30    +000016       05  CUSPMT-O      REDEFINES CUSMINQ-RECORD.                            <-ALL-FMTS
    31    +000017           06 CUSPMT-O-INDIC.                                                 <-ALL-FMTS
    32    +000018                07 IN99             PIC 1  INDIC 99.                          <-ALL-FMTS
          +000019*                          CUSTOMER NUMBER NOT FOUND PRESS RESET, THEN ENT    <-ALL-FMTS
    33    +000020                07 IN98             PIC 1  INDIC 98.                          <-ALL-FMTS
          +000021*                          EOF CONDITION IN READ, PROGRAM ENDED               <-ALL-FMTS
          +000022*  INPUT FORMAT:CUSFLDS    FROM FILE CUSMINQ    OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000023*                          CUSTOMER DISPLAY                                   <-ALL-FMTS
    34    +000024       05  CUSFLDS-I     REDEFINES CUSMINQ-RECORD.                            <-ALL-FMTS
    35    +000025           06 CUSFLDS-I-INDIC.                                                <-ALL-FMTS
    36    +000026                07 IN15             PIC 1  INDIC 15.                          <-ALL-FMTS
          +000027*                          END OF PROGRAM                                     <-ALL-FMTS
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/INQUIRY         ISERIES1   06/02/15 14:57:34        ページ    3
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
          +000028* OUTPUT FORMAT:CUSFLDS    FROM FILE CUSMINQ    OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000029*                          CUSTOMER DISPLAY                                   <-ALL-FMTS
    37    +000030       05  CUSFLDS-O     REDEFINES CUSMINQ-RECORD.                            <-ALL-FMTS
    38    +000031           06 NAME                  PIC X(25).                                <-ALL-FMTS
          +000032*                  CUSTOMER NAME                                              <-ALL-FMTS
    39    +000033           06 ADDR                  PIC X(20).                                <-ALL-FMTS
          +000034*                  CUSTOMER ADDRESS                                           <-ALL-FMTS
    40    +000035           06 CITY                  PIC X(20).                                <-ALL-FMTS
          +000036*                  CUSTOMER CITY                                              <-ALL-FMTS
    41    +000037           06 STATE                 PIC X(2).                                 <-ALL-FMTS
          +000038*                  STATE                                                      <-ALL-FMTS
    42    +000039           06 ZIP                   PIC S9(5).                                <-ALL-FMTS
          +000040*                  ZIP CODE                                                   <-ALL-FMTS
    43    +000041           06 ARBAL                 PIC S9(6)V9(2).                           <-ALL-FMTS
          +000042*                  ACCOUNTS REC. BALANCE                                      <-ALL-FMTS
           002700
    44     002800 FD  CUST-MASTER.
    45     002900 01  CUST-REC.
           003000     COPY DDS-CUSMST OF CUSMSTP.
          +000001*    I-O FORMAT:CUSMST     FROM FILE CUSMSTP    OF LIBRARY CBLGUIDE           CUSMST
          +000002*                          CUSTOMER MASTER RECORD                             CUSMST
          +000003*          USER SUPPLIED KEY BY RECORD KEY CLAUSE                             CUSMST
    46    +000004       05  CUSMST.                                                            CUSMST
    47    +000005           06 CUST                  PIC X(5).                                 CUSMST
          +000006*                  CUSTOMER NUMBER                                            CUSMST
    48    +000007           06 NAME                  PIC X(25).                                CUSMST
          +000008*                  CUSTOMER NAME                                              CUSMST
    49    +000009           06 ADDR                  PIC X(20).                                CUSMST
          +000010*                  CUSTOMER ADDRESS                                           CUSMST
    50    +000011           06 CITY                  PIC X(20).                                CUSMST
          +000012*                  CUSTOMER CITY                                              CUSMST
    51    +000013           06 STATE                 PIC X(2).                                 CUSMST
          +000014*                  STATE                                                      CUSMST
    52    +000015           06 ZIP                   PIC S9(5)         COMP-3.                 CUSMST
          +000016*                  ZIP CODE                                                   CUSMST
    53    +000017           06 SRHCOD                PIC X(6).                                 CUSMST
          +000018*                  CUSTOMER NUMBER SEARCH CODE                                CUSMST
    54    +000019           06 CUSTYP                PIC S9(1)         COMP-3.                 CUSMST
          +000020*                  CUSTOMER TYPE 1=GOV 2=SCH 3=BUS 4=PVT 5=OT                 CUSMST
    55    +000021           06 ARBAL                 PIC S9(6)V9(2)    COMP-3.                 CUSMST
          +000022*                  ACCOUNTS REC. BALANCE                                      CUSMST
    56    +000023           06 ORDBAL                PIC S9(6)V9(2)    COMP-3.                 CUSMST
          +000024*                  A/R AMT. IN ORDER FILE                                     CUSMST
    57    +000025           06 LSTAMT                PIC S9(6)V9(2)    COMP-3.                 CUSMST
          +000026*                  LAST AMT. PAID IN A/R                                      CUSMST
    58    +000027           06 LSTDAT                PIC S9(6)         COMP-3.                 CUSMST
          +000028*                  LAST DATE PAID IN A/R                                      CUSMST
    59    +000029           06 CRDLMT                PIC S9(6)V9(2)    COMP-3.                 CUSMST
          +000030*                  CUSTOMER CREDIT LIMIT                                      CUSMST
    60    +000031           06 SLSYR                 PIC S9(8)V9(2)    COMP-3.                 CUSMST
          +000032*                  CUSTOMER SALES THIS YEAR                                   CUSMST
    61    +000033           06 SLSLYR                PIC S9(8)V9(2)    COMP-3.                 CUSMST
          +000034*                  CUSTOMER SALES LAST YEAR                                   CUSMST
           003100
    62     003200 WORKING-STORAGE SECTION.
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/INQUIRY         ISERIES1   06/02/15 14:57:34        ページ    4
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
    63     003300 01  ONE                                 PIC 1 VALUE B"1".
    64     003400 01  CM-STATUS                           PIC X(2).
    65     003500 01  WS-CONTROL.
    66     003600     02  WS-IND                          PIC X(2).
    67     003700     02  WS-FORMAT                       PIC X(10).
           003800
    68     003900 PROCEDURE DIVISION.
    69     004000 DECLARATIVES.
           004100 DISPLAY-ERR-SECTION SECTION.
           004200     USE AFTER STANDARD EXCEPTION PROCEDURE ON CUST-DISPLAY.
           004300 DISPLAY-ERR-PARAGRAPH.
    70     004400     MOVE ONE TO IN98 OF CUSPMT-O
    71     004500     WRITE DISP-REC FORMAT IS "CUSPMT"
           004600     END-WRITE
    72     004700     CLOSE CUST-MASTER
           004800           CUST-DISPLAY.
    73     004900     STOP RUN.
           005000 END DECLARATIVES.
           005100
           005200 MAIN-PROGRAM SECTION.
           005300 MAINLINE.
    74     005400     OPEN INPUT CUST-MASTER
           005500          I-O CUST-DISPLAY.
           005600
    75     005700     MOVE ZERO TO IN99 OF CUSPMT-O
    76     005800     WRITE DISP-REC FORMAT IS "CUSPMT"   1 
           005900     END-WRITE
    77     006000     READ CUST-DISPLAY RECORD
           006100     END-READ
           006200
    78     006300     PERFORM UNTIL IN15 OF CUSPMT-I IS EQUAL TO ONE
           006400
    79     006500         MOVE CUST OF CUSPMT-I TO CUST OF CUSMST
    80     006600         READ CUST-MASTER RECORD   2 
           006700             INVALID KEY   3 
    81     006800                 MOVE ONE TO IN99 OF CUSPMT-O
    82     006900                 WRITE DISP-REC FORMAT IS "CUSPMT"
           007000                 END-WRITE
    83     007100                 READ CUST-DISPLAY RECORD
           007200                 END-READ
           007300             NOT INVALID KEY
    84     007400                 MOVE CORRESPONDING CUSMST TO CUSFLDS-O
                 *** CORRESPONDING items for statement 84:
                 ***     NAME
                 ***     ADDR
                 ***     CITY
                 ***     STATE
                 ***     ZIP
                 ***     ARBAL
                 *** End of CORRESPONDING items for statement 84
    85     007500                 WRITE DISP-REC FORMAT IS "CUSFLDS"
           007600                 END-WRITE
    86     007700                 READ CUST-DISPLAY RECORD
           007800                 END-READ
    87     007900                 IF  IN15 OF CUSPMT-I IS NOT EQUAL TO ONE
    88     008000                     MOVE ZERO TO IN99 OF CUSPMT-O
    89     008100                     WRITE DISP-REC FORMAT IS "CUSPMT"
           008200                     END-WRITE
    90     008300                     READ CUST-DISPLAY RECORD
           008400                     END-READ
           008500                 END-IF
           008600         END-READ
           008700
           008800     END-PERFORM
           008900
    91     009000     CLOSE CUST-MASTER
           009100           CUST-DISPLAY.
    92     009200     GOBACK.
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *

このプログラム例のソース・リスト全体がこの図に示されています。 特に、FILE-CONTROL と FD 項目、および形式 2 の COPY ステートメントによって生成されたデータ構造に注目してください。

 1  の WRITE 操作では、CUSPMT 様式をディスプレイ装置に書き込みます。 このレコードは、得意先番号の入力を要求するものです。 得意先番号を入力して実行キーを押すと、次の READ 操作によってそのレコードがプログラムの中に読み戻されます。

 2  の READ 操作では、得意先番号 (CUST) フィールドを使用して、CUSMSTP ファイルから対応する CUSMST レコードを取り出します。 CUSMSTP ファイルの中でレコードが見つからなければ、 3  の INVALID KEY 命令ステートメントが実行されます。 標識 99 がオンに設定され、

Customer number not found

というメッセージが様式書き込み時に表示されます。 メッセージは、そのファイルの DDS の標識 99 によって条件付けられています。 このメッセージを受け取ると、キーボードはロックされます。 このメッセージに応答してキーボードをアンロックするには、リセット・キーを押さなければなりません。 その後、別の得意先番号を入力できるようになります。

READ 操作によって CUSMSTP ファイルからレコードが取り出されると、WRITE 操作によって CUSFLDS レコードがディスプレイ・ワークステーションに書き込まれます。 このレコードには得意先の名前 (NAME)、所在地 (ADDRESS)、および売掛金残高 (A/R BALANCE) が含まれています。

次いで実行キーを押すと、プログラムは最初に戻ります。 別の得意先番号を入力するか、またはプログラムを終了することができます。 プログラムを終了するには、F1 キーを押します。 これによりプログラムの中で標識 15 がオンに設定されます。

標識 15 がオンになると、プログラムはすべてのファイルをクローズし、GOBACK ステートメントを処理します。 その後、制御をこの ILE COBOL プログラムの呼び出し側に戻します。

 1  の WRITE 操作によって書き出される最初の表示は、次のようなものです。

     Customer Master Inquiry

     Customer Number  ________

     Use F3 to end program, use enter key to return to prompt screen






最初の表示画面への応答として入力された得意先番号に対するレコードが CUSMSTP ファイルの中に見つかれば、次の画面が表示されます。

     Customer Master Inquiry

     Customer Number   1000

     Use F3 to end program, use enter key to return to prompt screen


     Name    EXAMPLE WHOLESALERS LTD.
     Address ANYWHERE STREET
     City    ACITY
     State   IL        Zipcode  12345
     A/R balance       137.02

最初の表示画面への応答として入力された得意先番号に対するレコードが CUSMSTP ファイルの中にない場合には、次の画面が表示されます。

     Customer Master Inquiry

     Customer Number

     Use F3 to end program, use enter key to return to prompt screen





     Customer number not found, press reset, then enter valid number