HPlogo Using KSAM XL: 900 Series HP 3000 Computer Systems > Appendix A COBOL Intrinsics

Examples of KSAM File Access

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

 » Index

The following three examples illustrate KSAM file access from a COBOL program. The file accessed in each example is called KSAMFILE. It was created previously with BYTE type keys: the primary key containing the name of a person and the alternate key containing his telephone number. The remaining data in each record is his address.

Sequential Write

The first example reads data from an input file into working storage and then writes it to a KSAM file. Access mode is sequential so that as each record is written, the keys are linked in sequential order although the records are not physically written in sequence. Input/output type is output only, the only type allowed for the procedure CKWRITE. The following procedures are illustrated:

  • CKOPEN

  • CKWRITE

  • CKCLOSE

Figure A-4 Sequential Write Using COBOL

 

Input to EXAMP1: 



NOLAN     JACK   923-4975  967 REED AVE.        SUNNYVALE   CA. 94087 

HOSODA    JOE    227-8214  1180 SAINT PETER CT. LOS ALTOS   CA. 94022 

ECKSTEIN  LEO    287-5137  5303 STEVENS CREEK   SANTA CLARA CA. 95050 

CARDIN    RICK   578-7018  11100 WOLFE ROAD     CUPERTINO   CA. 94053 

PASBY     LINDA  295-1187  TOWN & CNTRY VILLAGE SAN JOSE    CA. 94012 

SEELY     HENRY  293-4220  1144 LIBERTY ST.     EL CERRITO  CA. 94053 

ROBERT    GERRY  258-5535  12345 TELEGRAPH AVE. BERKELEY    CA. 90871 

TURNEWR   IVAN   984-8498  22905 EMERSON ST.    OAKLAND     CA. 98234 

WHITE     GORDON 398-0301  4350 ASHBY AVE.      BERKELEY    CA. 91234 

WESTER    ELDER  287-4598  1256 KINGFISHER ST.  SUNNYVALE   CA. 43098 

**END OF INPUT FOR EXAMP1** 



Program EXAMP1 

001000  IDENTIFICATION DIVISION. 

001100  PROGRAM-ID.  EXAMP1. 

001200  ENVIRONMENT  DIVISION. 

001300  INPUT-OUTPUT SECTIONS 

001400  FILE-CONTROL. 

001500     SELECT SEQ-DATA ASSIGN TO "SEQDATA". 

001600  DATA DIVISION. 

001700  FILE SECTION. 

001800  FD SEQ-DATA 

001900     LABEL RECORDS ARE STANDARD. 

002000  01 INPUT-REC. 

002100     05  REAL-DATA      PIC  X(72). 

002200  WORKING-STORAGE SECTION. 

002300  77  RECSIZE           PIC  S9(4) COMP  VALUE 74. 

002400  77  RESULT            PIC 9(4)         VALUE ZERO. 

002500  01  DATA-REC. 

002600      05  FILLER        PIC XX VALUE SPACES. 

002700      05  REAL-DATA     PIC X(72).

002800  01  FILETABLE. 

002900      02  FILENUMBER    PIC S9(4)   COMP VALUE 0. 

003000      02  FILENAME      PIC X(8)         VALUE "KSAMFILE". 

003100      02  I-O-TYPE      PIC S9(4)   COMP VALUE 1. 

003200      02  A-MODE        PIC S9(4)   COMP VALUE 0. 

003300      02  PREV-OP       PIC S9(4)   COMP VALUE 0. 

003400  01  STATUSKEY. 

003500      02  STATUS-KEY-1  PIC X. 

003600      02  STATUS.KEY-2  PIC X. 

003700 

003800  PROCEDURE DIVISION. 

003900  START. 

004000     OPEN INPUT SEQ-DATA 

004100     CALL "CKOPEN" USING FILETABLE, STATUSKEY. 

004200     IF STATUS-KEY-1="9" THEN 

004300        CALL "CKERROR" USING STATUSKEY, RESULT 

004400        DISPLAY "CKOPEN ERROR NO.", RESULT. 

004500     IF STATUS-KEY-1 NOT = "0" THEN 

004600        DISPLAY "CKOPEN FAILED" 

004700        STOP RUN. 

004800  LOOP. 

004900     READ SEQ-DATA 

005000        AT END GO TO FINISH. 

005100     MOVE CORP INPUT-REC TO DATA-REC. 

005200     CALL "CKWRITE" USING FILETABLE, STATUSKEY, DATA-REC, 

005300        RECSIZE. 

005400     IF STATUSKEY = "02" THEN 

005500        DISPLAY "DUPLICATE KEY". 

005600     IF STATUS-KEY-1 = "0" THEN 

005700        DISPLAY DATA-REC 

005800        GO TO LOOP. 

005900     IF STATUS-KEY-1 = "9" THEN 

006000        CALL "CKERROR" USING STATUSKEY, RESULT 

006100        DISPLAY "CKWRITE ERROR NO.", RESULT 

006200        DISPLAY DATA-REC 

006300        GO TO LOOP. 

006400  FINISH. 

006500     CLOSE SEQ-DATA. 

006600     CALL "CKCLOSE" USING FILETABLE, STATUSKEY. 

006700     IF STATUS-KEY-1 = "9" THEN 

006800        CALL "CKERROR" USING STATUSKEY, RESULT 

006900        DISPLAY "CKCLOSE ERROR NO. ". RESULT. 

007000     STOP RUN. 



Output from EXAMP1 Execution: 



NOLAN     JACK    923-4975   967 REED AVE.         SUNNYVALE    CA.  94087 

HOSODA    JOE     227-8214   1180 SAINT PETER CT.  LOS ALTOS    CA.  94022 

ECKSTEIN  LEO     287-5137   5303 STEVENS CREEK    SANTA CLARA  CA.  95050 

CARDIN    RICK    578-7018   11100 WOLFE ROAD      CUPERTINO    CA.  94053 

PASBY     LINDA   295-1187   TOWN & CNTRY VILLAGE  SAN JOSE     CA.  94012 

SEELY     HENRY   293-4220   1144 LIBERTY ST.      EL CERRITO   CA.  94053 

ROBERT    GERRY   258-5535   12345 TELEGRAPH AVE . BERKELEY     CA.  90871 

TURNEWR   IVAN    984-8498   22905 EMERSON ST.     OAKLAND      CA.  98234 

WHITE     GORDON  398-0301   4350 ASHBY AVE.       BERKELEY     CA.  91234 

WESTER    ELDER   287-4598   1256 KINGFISHER ST.   SUNNYVALE    CA.  43098 

END OF PROGRAM

Sequential Read

The second example reads the file KSAMFILE in sequential order by primary key (NAME) and prints each record as it is read. It then repositions the file to the first sequential record according to the alternate key (PHONE) and prints each of the records as it is read in this order. The file is opened in sequential mode for input only. The following procedures are illustrated:

  • CKOPEN

  • CKREAD

  • CKSTART

  • CKCLOSE

Figure A-5 Sequential Read Using COBOL

 



Program EXAMP2: 



001000  IDENTIFICATION DIVISION. 

001100  PROGRAM-ID. EXAMP2. 

001200  ENVIRONMENT DIVISION. 

001300  INPUT-OUTPUT SECTION. 

001400  FILE-CONTROL. 

001500      SELECT SEQ-DATA ASSIGN TO "SEQDATA". 

001600  DATA DIVISION. 

001700  WORKING-STORAGE SECTION. 

001800  77  RECSIZE          PIC  S9(4)  COMP  VALUE 74. 

001900  77  RESULT           PIC 9(4)          VALUE  ZERO. 

002000  77  KEY-LOC          PIC S9(4)   COMP  VALUE 23. 

002100  77  RELOP            PIC S9(4)   COMP  VALUE 2. 

002200  77  KEYLENGTH        PIC S9(4)   COMP  VALUE 8. 

002300  77  KEY-VALUE        PIC X(8)          VALUE "000-0000". 

002400  01  DATA-REC. 

002500      05  FILLER       PIC XX. 

002600      05  NAME         PIC X(20). 

002700      05  PHONE        PIC X(8). 

002800      05  OTHER-DATA   PIC X(44). 

002900 01   FILETABLE. 

003000      02  FILENUMBER   PIC S9(4)   COMP VALUE o. 

003100      02  FILENAME     PIC X(8)         VALUE "KSAMFILE". 

003200      02  I-O-TYPE     PIC S9(4)   COMP VALUE o. 

003300      02  A-MODE       PIC S9(4)   COMP VALUE o. 

003400      02  PREV-OP      PIC S9(4)   COMP VALUE o. 

003500  01  STATUSKEY. 

003600      02  STATUS-KEY-l PIC X. 

003700      02  STATUS-KEY-2 PIC X. 

003800 

003900  PROCEDURE DIVISION. 

004000  START. 

004100     CALL "CKOPEN" USING FILETABLE, STATUSKEY. 

004200     IF STATUS-KEY-1 = "9" THEN 

004300        CALL "CKERROR" USING STATUSKEY, RESULT 

004400        DISPLAY "CKOPEN ERROR NO.", RESULT. 

004500     IF STATUS-KEY-1 NOT = "0" THEN 

004600        DISPLAY "CKOPEN FAILED" 

004700        STOP RUN. 

004800     DISPLAY "ALPHABETICAL ORDER" 

004900     DISPLAY " ". 

005000  L00P1. 

005100     CALL "CKREAD" USING FILETABLE, STATUSKEY, DATA-REC, 

005200        RESIZED. 

005300     IF STATUS-KEY-1= "1" THEN GO TO PART2. 

005400     IF STATUS-KEY-1 = "0" THEN 

005500        DISPLAY DATA-REC 

005600     ELSE 

005700        DISPLAY "CKREAD ERROR, STATUS = ", STATUSKEY 

005800        IF STATUS-KEY-1 = "9" THEN 

005900           CALL "CKERROR" USING STATUSKEY, RESULT 

006000           DISPLAY "ERROR NO.", RESULT. 

006100     GO TO LOOP. 

006200  PART2.

006300     DISPLAY " ". 

006400     DISPLAY "PHONE NO. ORDER:" 

006500     DISPLAY " ". 

006600     CALL "CKSTART" USING FILETABLE, STATUSKEY, RELOP, 

006700        KEY-VALUE, KEY-LOC, KEYLENGTH. 

006800     IF STATUSKEY = "23" THEN GO TO FINISH. 

006900     IF STATUS-KEY-1 = "0" THEN GO TO LOOP2. 

007000     DISPLAY "CKSTART ERROR, STATUS = ", STATUSKEY. 

007100     IF STATUS-KEY-1 = "9" THEN 

007200        CALL "CKERROR" USING STATUSKEY, RESULT 

007300        DISPLAY "ERROR NO.", RESULT. 

007400     GO TO FINISH. 

007500  LOOP2. 

007600     CALL "CKREAD" USING FILETABLE, STATUSKEY, DATA-REC, 

007700        RECSIZE. 

007800     IF STATUS-KEY-1 = "1" THEN GO TO FINISH. 

007900     IF STATUS-KEY-1 = "0" THEN 

008000        DISPLAY DATA-REC 

008100     ELSE 

008200        DISPLAY "CKREAD ERROR, STATUS =", STATUSKEY 

008400     IF STATUS-KEY-1 ="9" THEN 

008400        CALL "CKERROR" USING STATUSKEY, RESULT 

008500        DISPLAY "ERROR NO. ", RESULT. 

008600     GO TO LOOP2. 

008700  FINISH. 

008800     CALL "CKCLOSE" USING FILETABLE, STATUSKEY. 

008900     IF STATUS-KEY-1 = "9" THEN 

009000        CALL "CKERROR" USING STATUSKEY, RESULT 

009100        DISPLAY "CKCLOSE ERROR NO.", RESULT. 

009200      STOP RUN. 



Output from EXAMP2 Execution: 

ALPHABETICAL ORDER: 

CARDIN    RICK    587-7018  11100 WOLFE ROAD      CUPERTINO CA.    94053 

ECKSTEIN  LEO     287-5137  5303 STEVENS CREEK    SANTA CLARA CA.  95050 

HOS0DA    JOE     227-8214  1180 SAINT PETER CT.  LOS ALTOS CA.    94022 

NOLAN     JACK    923-4975  967 REED AVE.         SUNNYVALE CA.    94087 

PASBY     LINDA   295-1187  TOWN & CNTRY VILLAGE  SAN JOSE CA.     94102 

ROBERT    GERRY   259-5535  12345 TELEGRAPH AVE.  BERKELEY CA.     90871 

SEELY     HENRY   293-4220  1144 LIBERTY ST.      EL CERRITO CA.   94053 

TURNEWR   IVAN    984-8498  22905 EMERSON ST.     OAKLAND CA.      98234 

WESTER    ELDER   287-4598  1256 KINGFISHER ST.   SUNNYVALE CA.    43098 

WHITE     GORDON  398-0301  4350 ASHBY AVE.       BERKELEY CA.     91234 




PHONE NO. ORDER: 

HOSODA    JOE     227-8214  1180 SAINT PETER CT.  LOS ALTOS CA.   94022 

ROBERT    GERRY   259-5535  12345 TELEGRAPH AVE.  BERKELEY CA.    90871 

WESTER    ELDER   287-4598  1256 KINGFISHER ST.   SUNNYVALE CA.   43098 

ECKSTEIN  LEO     287-5137  5303 STEVENS CREEK    SANTA CLARA CA. 95050 

SEELY     HENRY   293-4220  1144 LIBERTY ST.      EL CERRITO CA.  94053 

PASBY     LINDA   295-1187  TOWN & CNTRY VILLAGE  SAN JOSE CA.    94102 

WHITE     GORDON  398-0301  4350 ASHBY AVE.       BERKELEY CA.    91234 

CARDIN    RICK    578-7018  11100 WOLFE ROAD      CUPERTINO CA.   94053 

NOLAN     JACK    923-4975  967 REED AVE.         SUNNYVALE CA.   94087 

TURNEWR   IVAN    984-8498  22905 EMERSON ST.     OAKLAND CA.     98234 



END OF PROGRAM 

Random Update

This example reads a set of new data containing update information into the WORKING-STORAGE SECTION. Each record read is followed by a U for update, a D for delete, or an A for add. Records to be added are written to the file KSAMFILE using CKWRITE in random mode. Records to be updated are copied to the appropriate record with CKREWRITE. Records to be deleted are first read into the WORKING-STORAGE SECTION with CKREADBYKEY and then deleted with CKDELETE. The file is opened in random mode for input/output.

The procedures illustrated by this example are:

  • CKOPEN

  • CKREADBYKEY

  • CKDELETE

  • CKREWRITE

  • CKWRITE

  • CKCLOSE

Figure A-6 Random Update with COBOL



Program EXAMP3: 



001000  IDENTIFICATION DIVISION, 

001100  PROGRAM-ID. EXAMP3. 

001200  ENVIRONMENT DIVISION. 

001300  INPUT-OUTPUT SECTION. 

001400  FILE-CONTROL. 

001500      SELECT NEW-DATA ASSIGN TO "NEWDATA". 

001600  DATA DIVISION. 

001700  FILE SECTION. 

001800  FD  NEW-DATA 

001900      LABEL RECORDS ARE STANDARD. 

002000  01  INPUT-REC            PIC X(73), 

002100  WORKING-STORAGE SECTION, 

002200  77  RECSIZE              PIC S9(4)  COMP VALUE 74. 

002300  77  RESULT               PIC 9(4)        VALUE ZERO. 

002400  77  KEY-LOC              PIC S9(4)  COMP VALUE 3. 

002500  01  MASTER-REC. 

002600      05  FILLER           PIC XX. 

002700      05  NAME             PIC X(20). 

002800      05  PHONE            PIC X(8). 

002900      05  OTHER-DATA       PIC X(44). 

003000  01  DATA-REC. 

003100      05  NAME             PIC X(20). 

003200      05  PHONE            PIC X (8). 

003300      05  OTHER-DATA       PIC X(44). 

003400      05  TRANSACTION-CODE PIC X. 

003500  01  FILETABLE. 

003600      02  FILENUMRER       PIC S9(4)  COMP VALUE o. 

003700      O2  FILENAME         PIC X(8)        VALUE "KSAMFILE". 

003800      02  I-O-TYPE         PIC S9(4)  COMP VALUE 2. 

003900      02  A-MoDE           PIC S9(4)  COMP VALUE 1. 

004000      02  PHEV-OP          PIC S9(4)  COMP VALUE 0. 

004100  01  STATUSKEY. 

004200      02  STATUS-KEY-1     PIC X. 

004300      02  STATUS-KEY-2     PIC X. 

004400 

004500  PROCEDURE DIVISION. 

004600  START. 

004700    OPEN INPUT NEW-DATA. 

004800    CALL "CKOPEN" USING FILETABLE, STATUSKEY. 

004900    IF STATUS-KEY-1 = "9" THEN 

005000       CALL "CKERROR" USING STATUSKEY, RESULT 

005100       DISPLAY "CKOPEN ERROR NO.", RESULT. 

005200    IF STATUS-KEY-1 NOT ="0" THEN 

005300       DISPLAY "CKOPEN FAILED" 

005400       STOP RUN. 

005500  LOOP. 

005600    READ NEW-DATA INTO DATA-REC; 

005700       AT END GO TO FINISH. 

005800    IF TRANSACTION-CODE = "A" THEN GO TO ADD-REC, 

005900    IF TRANSACTION-CODE NOT = "D" AND "U" THEN 

006000       DISPLAY "ILLEGAL TRANSACTION CODE" 

006100       DISPLAY DATA-REC 

006200       GO TO LOOP. 

006300    CALL "CKREADBYKEY" USING FILETABLE, STATUSKEY, MASTER-REC, 

006400       NAME OF DATA-REC, KEY-LOC, RECSIZE. 

006500    IF STATUS-KEY-1 NOT = "0" THEN 

006600       DISPLAY "CKREADBYKEY ERROR, STATUS =", STATUSKEY, 

006700          ";  KEY =", NAME OF DATA-REC 

006800       IF STATUS-KEY-1 = "9" THEN 

006900          CALL "CKERROR" USING STATUSKEY, RESULT 

007000          DISPLAY "ERROR NO.", RESULT 

007100          GO TO LOOP 

007200       ELSE 

007300          GO TO LOOP. 

007400    IF TRANSACTION-CODE = "D" THEN GO TO DELETE-REC. 

007500    MOVE CORR DATA-REC TO MASTER-REC. 

007600    CALL "CKREWRITE" USING FILETABLE, STATUSKEY, MASTER-REC, 

007700       RECSIZE. 

007800    IF STATUS-KEY-1 = "0" THEN 

007900       DISPLAY MASTER-REC, "UPDATED" 

008000       GO TO LOOP. 

008100    DISPLAY "CKREWRITE ERROR, STATUS =", STATUSKEY, "; KEY =" 

008200       NAME OF MASTER-REC. 

008300    IF STATUS KEY-1= "9" THEN 

008400       CALL "CKERROR" USING STATUSKEY, RESULT 

008500       DISPLAY "ERROR NO.", RESULT 

008600       GO TO LOOP. 

008700  DELETE-REC. 

008800    CALL "CKDELETE" USING FILETABLE, STATUSKEY. 

008900    IF STATUS-KEY-1 = "0" THEN 

009000       DISPLAY MASTER-REC, "DELETED" 

009100       GO TO LOOP. 

009200    DISPLAY "CKDELETE ERROR, STATUS =" STATUSKEY. 

009300    IF STATUS-KEY-1 = "9" THEN 

009400        CALL "CKERROR", USING STATUSKEY, RESULT 

009500        DISPLAY "ERROR NO.", RESULT. 

009600    GO TO LOOP. 

009700  ADD-REC. 

009800    MOVE CORR DATA-REC TO MASTER-REC. 

009900    CALL "CKWRITE" USING FILETABLE, STATUSKEY, MASTER-REC. 

010000        RECSIZE. 

010100    IF STATUSKEY = "02" THEN 

010200        DISPLAY "DUPLICATE KEY", 

010300    IF STATUS-KEY-1 = "0" THEN 

010400        DISPLAY MASTER-REC, "ADDED" 

010500        GO TO LOOP. 

010600    DISPLAY "CKWRITE ERROR, STATUS = ", STATUSKEY. 

010700    IF STATUS-KEY-1 = "9" THEN 

010800        CALL "CKERROR" USING STATUSKEY, RESULT 

010900        DISPLAY "ERROR NO. ", RESULT. 

011000    DISPLAY MASTER-REC, 

011100    GO TO LOOP. 

011200  FINISH. 

011300    CLOSE NEW-DATA. 

011400    CALL "CKCLOSE" USING FILETABLE, STATUSKEY, 

011500    IF STATUS-KEY-1 = "9" THEN 

011600       CALL "CKERROR" USING STATUSKEY, RESULT 

011700       DISPLAY "CKCLOSE ERROR NO.", RESULT 

011800    STOP RUN. 



Input to EXAMP3: 



NOLAN      JACK     923-4975  1 ANY STREET.          SUNNYVALE CA.   94O87U 

SMITH      JOHN     555-1212  102 FIRST ST.          OUR TOWN CA.    94099A 

ECKSTEIN   LEO                                                            D 

CARDIN     RICK     257-7000  11100 WOLFE ROAD       CUPERTINO CA.   94041U 

PASBY      LINDAL                                                         D 

JANE       MARY     565-9090  1776 BICENTENNIAL ST.  AMAHEIM CA.     91076A 

ROBERT     GERRY    259-5535  12345 TELEGRAPH AVE.   BERKELEY CA.    94704U 

TURNEW     IVAN                                                           D 

FORD       GERALD   555-1976  1600 PENNSYLVANIA      WASHINGTON DC.  20001U 

WESTER     ELDER    287-4598  1256 KINGFISHER ST.    SUNNYVALE CA.   94309A 



Output from Execution of EXAMP3: 



NOLAN      JACK      923-4975  1 ANY STREET.         SUNNYVALE   CA. 94087 

                                                                     UPDATED 

SMITH      JOHN      555-1212  102 FIRST ST.         OUR TOWN    CA. 94099 

                                                                     ADDED 

ECKSTEIN   LEO       287-5137  5303 STEVENS CREEK    SANTA CLARA CA. 95050 

                                                                     DELETED 

CARDIN     RICK      257-7000  11100 WOLFE ROAD      CUPERTINO   CA. 94014 

                                                                     UPDATED 

PASBY      LINDA     295-1187  TOWN & CNTRY VILLAGE  SAN JOSE    CA. 94102 

                                                                     DELETED 

JANE       MARY      565-9090  1776 BICENTENNIAL ST. ANAHEIM     CA. 91076 

                                                                     ADDED 

ROBERT     GERRY     259-5535  12345 TELEGRAPH AVE.  BERKELEY    CA. 94704 

                                                                     UPDATED 

CKREADBYKEY  ERROR, STATUS = 23;  KEY = TURNEW    IVAN 

CKREADBYKEY  ERROR, STATUS = 23;  KEY = FORD      GERALD 

CKWRITE  ERROR, STATUS = 22 

WESTER     ELDER     287-4598  1256 KINGFISHER ST.   SUNNYVALE   CA. 94309 
NOTE: Note that the input contains data that results in error messages. The name IVAN TURNEW is spelled incorrectly and cannot be found. The name GERALD FORD does not exist in the original file and also cannot be found. On the other hand, the name ELDER WESTER already exists in the file and cannot be added since it is a primary key for which duplicates are not allowed.
Feedback to webmaster