図 131 に、ILE COBOL TRANSACTION ファイルを使用した基本的な照会プログラムに関連する DDS を示します。
....+....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 レコードはディスプレイ装置上にそのまま残ります。
ディスプレイ装置用に固定情報、フィールド、および属性を記述することに加えて、 レコード様式は、定数やフィールドが表示される水平位置と行番号も定義します。
....+....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 ファイルがレコード様式のキー・フィールドとして指定されています。
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
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.