COBOL INMOD Example - MultiLoad

Teradata MultiLoad Reference

Product
MultiLoad
Release Number
15.10
Language
English (United States)
Last Update
2018-10-06
dita:id
B035-2409
lifecycle
previous
Product Category
Teradata Tools and Utilities

COBOL INMOD Example

This INMOD example reads and returns an 80-byte record string.

        
              
              
              //DBCCB1 JOB 1,'DBC',MSGCLASS=A,NOTIFY=DBC,CLASS=B,REGION=4096K
              //COBCOMPL EXEC COBUCL 
              //COB.SYSIN DD *
                     IDENTIFICATION DIVISION. 
                     PROGRAM-ID. DYNAMN. 
                     AUTHOR. JAMES KIM. 
                     INSTALLATION. TERADATA. 
                     DATE-WRITTEN. 05 SEPTEMBER 1989. 
                     DATE-COMPILED. 
                     SECURITY. OPEN. 
                     REMARKS.
                        THIS PROGRAM IS AN EXAMPLE OF A COBOL INMOD ROUTINE FOR 
                        MULTILOAD. 
                        FUNCTION: THIS PROGRAM READS AND  RETURNS A RECORD
                                  OF 80 BYTES LONG VIA STRUCT-1 AND STRUCT-2. 
                     ENVIRONMENT DIVISION. 
                     CONFIGURATION SECTION. 
                     SOURCE-COMPUTER. IBM-370. 
                     OBJECT-COMPUTER. IBM-370. 
                     INPUT-OUTPUT SECTION. 
                     FILE-CONTROL.
                         SELECT INMOD-DATA-FILE ASSIGN TO SYSIN-INDATA. 
                     DATA DIVISION. 
                     FILE SECTION. 
                     FD  INMOD-DATA-FILE
                         BLOCK CONTAINS 0 RECORDS 
                         LABEL RECORDS STANDARD.
                     01  INPUT-PARM-AREA            PICTURE IS X(80). 
                     WORKING-STORAGE SECTION. 
                     01  NUMIN                      PICTURE S9(4) COMP VALUE +0.
                     01  NUMOUT                     PICTURE S9(4) COMP VALUE +0. 
                     LINKAGE SECTION.
                    *MLOAD COMMUNICATES WITH INMOD VIA STRUCT-1 AND STRUCT-2. 
                     01  STRUCT-1.
                         02  RETURN-INDICATE        PIC S9(9) COMP.
                         02  RECORD-LEN             PIC S9(9) COMP.
                         02  RECORD-BODY.
                         03  DATA-AREA1             PIC X(80).
                     01  STRUCT-2.
                         02  SEQ-NUMBER             PIC S9(9) COMP. 
                         02  PARM-LIST.
                             05 PARM-LENTH          PIC X(2).
                             05 PARM-STRING         PIC X(80).
                     PROCEDURE DIVISION USING STRUCT-1, STRUCT-2. 
                     BEGIN. 
                     MAIN.
                         DISPLAY "==============================================" 
                         DISPLAY STRUCT-1. 
                         DISPLAY STRUCT-2. 
                         IF RETURN-INDICATE = 0 THEN
                    *       INMOD INITIALIZATION - OPEN FILE AND READ THE 1ST REC.
                            DISPLAY "INMOD CALLED - RETURN CODE 0 " 
                            PERFORM OPEN-FILES 
                            PERFORM READ-RECORDS 
                            GOBACK
                         ELSE 
                         IF RETURN-INDICATE = 1 THEN
                    *       READ A RECORD.
                            DISPLAY "INMOD CALLED - RETURN CODE 1 " 
                            PERFORM READ-RECORDS 
                            GOBACK
                         ELSE 
                         IF RETURN-INDICATE = 5 THEN
                    *       CLOSE INMOD - JUST SEND RETURN CODE = 0 
                            DISPLAY "INMOD CALLED - RETURN CODE 5 " 
                            MOVE 0 TO RECORD-LEN 
                            MOVE 0 TO RETURN-INDICATE 
                            GOBACK
                         ELSE 
                    *       UNKNOWN CODE.
                            DISPLAY "INMOD CALLED - RETURN CODE X " 
                            MOVE 0 TO RECORD-LEN 
                            MOVE 16 TO RETURN-INDICATE 
                            GOBACK.
                     OPEN-FILES.
                         OPEN INPUT INMOD-DATA-FILE. 
                         MOVE 0 TO RETURN-INDICATE.
                     READ-RECORDS.
                         READ INMOD-DATA-FILE INTO DATA-AREA1 
                              AT END GO TO END-DATA.
                         ADD 1 TO NUMIN. 
                         MOVE 80 TO RECORD-LEN. 
                         MOVE 0 TO RETURN-INDICATE. 
                         ADD 1 TO NUMOUT.
                     END-DATA. 
                         CLOSE INMOD-DATA-FILE. 
                         DISPLAY "NUMBER OF INPUT RECORDS  = " NUMIN. 
                         DISPLAY "NUMBER OF OUTPUT RECORDS = " NUMOUT. 
                         MOVE 0 TO RECORD-LEN. 
                         MOVE 0 TO RETURN-INDICATE. 
                         GOBACK.
              /* 
              //LKED.SYSLMOD DD DSN=JCK.INMOD.LOAD(INMODG1),DISP=MOD 
              //LKED.SYSIN  DD *
                 ENTRY DYNAMN 
                 NAME INMODG1(R)
              /* 
              //*****************************************************************
              //*  NEXT 3 STEPS PREPARE TERADATA DBS FOR THE MULTILOAD'S INMOD  *
              //*  TEST.                                                        *
              //*****************************************************************
              //MLOADDEL  EXEC PGM=IEFBR14 
              //MLOADLOG  DD  DSN=JCK.INMOD.TDQ8.MLOADLOG, 
              //          DISP=(MOD,DELETE),UNIT=SYSDA,SPACE=(TRK,0) 
              //MLOADCAT  EXEC PGM=BLKMAIN 
              //SYSPRINT  DD  SYSOUT=* 
              //MLOADLOG  DD  DSN=JCK.INMOD.TDQ8.MLOADLOG,DISP=(NEW,CATLG), 
              //          UNIT=SYSDA,DCB=(RECFM=F,DSORG=PS,LRECL=8244), 
              //          SPACE=(8244,(12,5)) 
              //SYSIN     DD  *
              //*****************************************************************
              //*  THIS STEP WILL ONLY DROP THE TABLES IF MLOAD NOT IN APPLY    *
              //*  PHASE.                                                       *
              //*****************************************************************
              //CREATE    EXEC BTEQ 
              //STEPLIB   DD  DSN=STV.GG00.APP.L,DISP=SHR 
              //          DD  DSN=STV.TG00.APP.L,DISP=SHR 
              //          DD  DSN=STV.RG00.APP.L,DISP=SHR 
              //SYSPRINT  DD  SYSOUT=* 
              //SYSABEND  DD  SYSOUT=*
              //SYSIN     DD  DATA,DLM=## 
              .LOGON TDQ8/DBC,DBC; 
              RELEASE MLOAD XXXX.INMODCB1;
              .IF ERRORCODE = 2572 THEN .GOTO NODROP;
              DROP TABLE XXXX.LOGTABLE; 
              DROP TABLE XXXX.ET_INMODCB1; 
              DROP TABLE XXXX.UV_INMODCB1; 
              DROP TABLE XXXX.WT_INMODCB1
              .QUIT;
              .LABEL NODROP;
              .EXIT 4;; 
              DROP USER XXXX; 
              ## 
              //******************************************************************
              //*                                                                *
              //*    RUN MULTILOAD                                               *
              //*                                                                *
              //******************************************************************
              //LOADIT   EXEC PGM=MLOAD
              //LOADIT   EXEC PGM=MLOAD 
              //STEPLIB  DD  DISP=SHR,DSN=JCK.INMOD.LOAD 
              //SYSPRINT DD  SYSOUT=* 
              //SYSTERM  DD  SYSOUT=* 
              //SYSOUT   DD  SYSOUT=* 
              //SYSIN    DD  DATA,DLM=## 
              .LOGTABLE XXXX.LOGTABLE; 
              .LOGON TDQ8/XXXX,XXXX; 
              /*  TEST DATAIN, DATALOC          */
              DROP TABLE XXXX.INMODCB1;  
              CREATE TABLE INMODCB1 (F1 CHAR(10), F2 CHAR(70)); 
              .BEGIN IMPORT MLOAD TABLES INMODCB1; 
              .Layout layname1; 
              .Field L1Fld1 1 Char(10); 
              .Field L1Fld2 * Char(70); 
              .DML Label DML1; 
              INSERT INMODCB1(F1,F2) VALUES (:L1FLD1, :L1FLD2); 
              .IMPORT INMOD INMODG1 USING ("AAA" "BBB") LAYOUT LAYNAME1 APPLY DML1;
              .End Mload; 
              .LOGOFF; 
              ## 
              //INDATA  DD DATA,DLM=## 
              01COBOL1  AAAAAAAAAAAAAAAA 
              02COBOL1  BBBBBBBBBBBBBBBB 
              03COBOL1  CCCCCCCCCCCCCCCC 
              04COBOL1  DDDDDDDDDDDDDDDD 
              ## 
              //SELECT   EXEC BTEQ 
              //STEPLIB  DD  DSN=STV.GG00.APP.L,DISP=SHR 
              //         DD  DSN=STV.TG00.APP.L,DISP=SHR 
              //         DD  DSN=STV.RG00.APP.L,DISP=SHR 
              //SYSPRINT DD  SYSOUT=* 
              //SYSABEND DD  SYSOUT=* 
              //SYSIN    DD  DATA,DLM=## 
              .LOGON TDQ8/XXXX,XXXX; 
              SELECT * FROM INMODCB1; 
              .LOGOFF; 
              ## 
              //