COBOL INMOD Example - MultiLoad

Teradata® MultiLoad Reference

Product
MultiLoad
Release Number
17.00
Published
June 2020
Language
English (United States)
Last Update
2020-06-18
dita:mapPath
aim1544831946660.ditamap
dita:ditavalPath
gyk1507317446489.ditaval
dita:id
B035-2409
lifecycle
previous
Product Category
Teradata Tools and Utilities

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;
              ##
              //