15.00 - z/OS - FastLoad

Teradata FastLoad Reference

prodname
FastLoad
vrm_release
15.00
category
Programming Reference
featnum
B035-2411-034K

z/OS

Assembler INMOD Example

The INMOD in the following example reads a record from the input data file and adds a four‑byte integer field to the front of the record. The new field contains a sequence record that ranges from one to the total number of input records.

BULKCON TITLE’‑‑ CONCATENATE INPUT RECORDS FOR INPUT TO FASTLOAD ’
BULKCON CSECT
      USING BULKCON,15
******************************************************************** 
*  THIS PROGRAM IS CALLED BY THE TERADATA FASTLOAD PROGRAMS        * 
*     TO OBTAIN A RECORD TO BE USED TO INSERT, UPDATE, DELETE,     * 
*     OR SELECT ROWS OF A DBC TABLE.                               * 
*                                                                  * 
*  THIS PROGRAM IS NOT REENTRANT.                                  * 
*  FUNCTION:                                                       * 
*           READ AN INPUT RECORD AND ADD A FOUR‑BYTE INTEGER FIELD * 
*           THE FRONT OF THE RECORD.  THE NEW FIELD WILL CONTAIN   * 
*           A SEQUENCE NUMBER WHICH RANGES FROM 1 TO ...           * 
*           NUMBER‑OF‑INPUT‑RECORDS.                               * 
*                                                                  * 
*           RETURN TO THE CALLER, FASTLOAD, INDICATING             * 
*           EITHER MORE RECORDS ARE AVAILABLE OR NO MORE RECORDS   * 
*           ARE TO BE PROCESSED.                                   * 
*                                                                  * 
*  THIS INMOD PROGRAM CAN BE USED TO ENSURE UNIQUE RECORDS         * 
*  IN CERTAIN APPLICATIONS, THE SEQUENCE FIELD                     * 
*     CAN BE USED FOR “DATA SAMPLING”.                             * 
*                                                                  * 
*  DDNAME OF THE INPUT DATA SET: “INDATA”                          * 
*                                                                  * 
********************************************************************
      B    STOREGS                 BRANCH AROUND EP
      DC   AL1(31)                 DEFINE EP LENGTH
      DC   CL9’BULKIN  ’           DEFINE
      DC   CL9’&SYSDATE’           ENTRY
      DC   CL8’   MVS ’            POINT
      DC   CL5’&SYSTIME’           IDENTIFIER
******************************************************************** 
*                    SAVE REGISTERS                                * 
******************************************************************** 
STOREGS  DS   0H                     DEFINE AND ALIGN SYMBOL
         STM   R14,R12,12(R13)       STORE OFF CALLER’S REGISTERS
         LR    R12,R15               COPY BASE ADDRESS
         DROP  R15                   DROP VOLATILE BASE REGISTER
         USING BULKCON,R12           ESTAB PERM CSECT ADDRBLTY
         LA    R14,SAVEAREA          POINT AT LOCAL SAVE WORK
         ST    R14,8(,R13)           STORE FWD LINK IN SA CHAIN
         ST    R13,4(,R14)           STORE BWD LINK IN SA CHAIN
         LR    R13,R14               COPY LOCAL SAVE/WORK AREA ADDR
         L     R11,0(,R1)            POINT TO PARM
      SPACE 1
******************************************************************** 
*                VOPEN  “DATA” DATA SET                            * 
*                       (ONLY THE FIRST TIME)                      * 
********************************************************************
         USING PREBUF,R11              COVER PRE‑PROC AREA
         LA    R9,PREREC               POINT TO START OF PREPROC.  DATA
         L     R15,PRECODE             CHECK ON CODE FROM FASTLOAD
                 OC    PRECODE,PRECODE         FIRST ENTRY ? (0=FIRST ENTRY)
         BNZ   NOOPEN                  NO, SKIP OPEN
         USING IHADCB,R10              YES,COVER DCB FOR OPEN
         LA    R10,INDATA              POINT TO DATA DCB
         OPEN  INDATA                  OPEN INPUT DATA SET
         TM    DCBOFLGS,X’10’          DID IT OPEN ?
         BO    OPENOK                  YES,
         WTO   ’UNABLE TO OPEN INDATADATA SET’,ROUTCDE=11
         B     BADRET                  RETURN WITH ERROR CODE
******************************************************************* 
*          CHECK FASTLOAD/BULKLOAD STATUS CODES                   * 
* 0 =  FIRST ENTRY       (FASTLOAD/BULKLOAD EXPECTS TO RECEIVE A  * 
*                         RECORD)                                 * 
* 1 =  GET NEXT RECORD   (FASTLOAD/BULKLOAD EXPECTS TO RECEIVE A  * 
*                         RECORD)                                 * 
* 2 =  Client RESTART CALL (FASTLOAD DOES NOT EXPECT A RECORD)    * 
* 3 =  CHECKPOINT CALL   (FASTLOAD DOES NOT EXPECT A RECORD)      * 
* 4 =  DBC RESTART CALL  (FASTLOAD DOES NOT EXPECT A RECORD)      * 
*                                                                 * 
*                                                                 * 
*     NOTE: THIS INMOD WAS WRITTEN TO BE COMPATIBLE WITH FASTLOAD * 
*           AND BULKLOAD AND THEREFORE CONTAINS INFORMATION ON    * 
*           STATUS CODES 2,3, AND 4 WHICH PERTAIN ONLY TO         * 
*           FASTLOAD. CODES 2,3, AND 4 ARE NOT HANDLED BY         * 
*           THIS PROGRAM.                                         * 
******************************************************************* 
OPENOK   DS 0H 
         MVI  ISPOPEN,1            INDICATE INPUT FILE HAS BEEN OPEN
NOOPEN   L   R15,PRECODE           CHECK ON CODE FROM FASTLOAD
         C     R15,=F’1’           NEED RECORD ?
         BH    NOREC               NO , DO NOT “GET” A RECORD
         L     R15,SAMPNUM         GET CURRENT SAMPLE NUM.
         LA    R15,1(R15)          INCR BY 1
         ST    R15,0(R9)           STORE AT FRONT OF RECORD
         ST    R15,SAMPNUM         RESET COUNTER
         LA    R9,4(R9)            ADVANCE FOR READ ADDR.
         LA    R10,INDATA          COVER INDATA DCB
GETNEXT  GET   INDATA,(R9)            READ A RECORD
INCREC   LH    R9,DCBLRECL          GET RECORD LENGTH
         AH    R9,=H’4’             ADD 4 FOR NEW FIELD
         SR    R15,R15               SET RETURN CODE VALUE
RETURN   ST    R9,PRELEN             SET LENGTH (ZERO AFTER EOF)
         ST    R15,PRECODE 
         L     R13,4(,R13) 
         RETURN (14,12),RC=0         RETURN
         SPACE
CLEANUP  DS  0H
         CLI   ISOPEN,0              IS INPUT FILE OPEN?
         BE    RETURN                NO ‑ JUST RETURN
         B     EOF                   CLEAN IT UP
         SPACE5
********************************************************************
*        EOF ENTERED AT END‑OF‑FILE                                * 
******************************************************************** 
EOF      CLOSE INDATA                CLOSE INPUT DATA SET 
         MVI   ISOPEN,0              INDICATE FILE NOT OPEN
******************************************************************** 
NOREC    SR    R15,R15               SET ZERO RETURN CODE
         SR    R9,R9                 SET ZERO LENGTH
         B     RETURN                RETURN
* 
BADRET   LA    R15,16               SET RETURN CODE FOR ERROR
         SR    R9,R9                SET LENGTH = 0 
         B     RETURN               ERROR RETURN 
         EJECT
*
*     CONSTANTS
*
R0       EQU   0
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
R5       EQU   5
R6       EQU   6
R7       EQU   7
R8       EQU   8
R9       EQU   9
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
         EJECT 
* 
*     DATA STRUCTURES AND VARIABLES 
*
         SPACE
SAVEAREA DC    18F’0’               SAVE AREA
SAMPNUM  DC    F’0’
ISOPEN   DC    XL1’00’             OPEN FILE INDICATOR
         SPACE 10
INDATA   DCB   DDNAME=INDATA,MACRF=(GM),DSORG=PS,EODAD=EOF
PREBUF   DSECT
PRECODE  DS    F
PRELEN   DS    F
ROWSIZE  EQU   31774    MAXIMUM ROW SIZE 
PREREC   DS    0XL(ROWSIZE)
         DCBD  DEVD=DA,DSORG=PS 
      END