Sunday, 22 December 2013

Sending data in Mainframe through SFT

From mainframe a file can be sent through SFT either in Binary or in Text format.

Format of sending:
1. If the File is in Text format then the SFT setup should be in set ASCII by default.
2. If the File is in Binary then the SFT setup should be in set Binary by default.

Necessary details:
1. Sender node details
2. Transmission ID
3. User name of the Source


Types of receptions:
1. Through Protocol
2. Through Mailbox


To remove trailing space

PROCEDURE DIVISION.

MOVE 0 TO TRAIL-SPACE-VAR.
MOVE 0 TO TEMP-VAR.
INSPECT FUNCTION REVERSE(VAR1) TALLYING TRAIL-SPACE-VAR FOR LEADING SPACES.
COMPUTE TEMP-VAR = LENGTH OF VAR1 - TRAIL-SPACE-VAR.

 ADD 1 TO TRAIL-SPACE-VAR
STRING  VAR1(TRAIL-SPACE-VAR:TEMP-VAR) DELIMITED BY SIZE
                VAR-END   DELIMITED BY SIZE
                INTO REC.
PERFORM WRITE-PARA.    

To remove leading spaces

PROCEDURE DIVISION.

MOVE 0 TO LEAD-SPACE-VAR.
MOVE 0 TO TEMP-VAR.
INSPECT VAR1 TALLYING LEAD-SPACE-VAR FOR LEADING SPACES.
COMPUTE TEMP-VAR = LENGTH OF VAR1 - LEAD-SPACE-VAR.

ADD 1 TO LEAD-SPACE-VAR
STRING VAR-FRONT DELIMITED BY SIZE
               VAR1(LEAD-SPACE-VAR:TEMP-VAR) DELIMITED BY SIZE
               INTO RECORD-VAL.
PERFORM WRITE-PARA.    

Sunday, 1 September 2013

Sample program to compare two input files and write to output file

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROG004.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
             SELECT INFILE1 ASSIGN TO DD1
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS INFS1.

             SELECT INFILE2 ASSIGN TO DD2
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS INFS2.

             SELECT OUTFILE ASSIGN TO DD3
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS OUTFS.

       DATA DIVISION.
       FILE SECTION.
       FD INFILE1.
       01 FS-INREC1.
          88 IN1-EOF               VALUE HIGH-VALUES.
          05 FS-ID                 PIC 9(3).
          05 FILLER                PIC X(1).
          05 FS-NAME               PIC X(25).
          05 FILLER                PIC X(1).
          05 FS-CLASS              PIC X(5).
          05 FILLER                PIC X(45).

       FD INFILE2.
       01 FS-INREC2.
          88 IN2-EOF               VALUE HIGH-VALUES.
          05 IS-ID                 PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB1M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB2M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB3M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB4M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB5M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB6M              PIC 9(3).
          05 FILLER                PIC X(53).

       FD OUTFILE.
       01 FS-OUTREC.
          05 OS-ID                 PIC 9(3).
          05 FILLER                PIC X.
          05 OS-NAME               PIC X(25).
          05 FILLER                PIC X.
          05 OS-CLASS              PIC X(5).
          05 FILLER                PIC X.
          05 OS-TOTAL              PIC 9(3).
          05 FILLER                PIC X.
          05 OS-GRADE              PIC X(2).
          05 FILLER                PIC X(38).

       WORKING-STORAGE SECTION.
       77 INFS1                    PIC XX.
       77 INFS2                    PIC XX.
       77 OUTFS                    PIC XX.
       01 TOTAL-M                  PIC 9(3).
       01 AVG-M                    PIC 9(3).
       01 GRADE-M                  PIC X(2).
       01 STUDMRK1            PIC 9(2).
       01 STUDMRK2            PIC 9(2).
       01 STUDMRK3            PIC 9(2).
       01 STUDMRK4            PIC 9(2).
       01 STUDMRK5            PIC 9(2).
       01 STUDMRK6            PIC 9(2).

           EXEC SQL
                INCLUDE STUDBLE
           END-EXEC.
           EXEC SQL
                INCLUDE SQLCA
           END-EXEC.


           EXEC SQL
                DECLARE CUR_STU CURSOR FOR SELECT STUD_ID,STUD_NAME,
                        STUD_CLASS,STUD_MRK1,
                        STUD_MRK2,STUD_MRK3,STUD_MRK4,STUD_MRK5
                        STUD_MRK6 FROM OZA062.STUDBLE
           END-EXEC.


       PROCEDURE DIVISION.

      ***  MAIN PARA IS SUSED TO DIRECT THE FLOW FOR THE PROGRAM IN ***
      ***                 RIGHT DIRECTION                           ***
       001-MAIN-PARA.
            PERFORM 002-OPEN-PARA.
            PERFORM 003-READ-PARA UNTIL IN1-EOF.
            PERFORM 009-CLOSE-PARA.

      ***   OPEN PARA WHERE ALL THE FLAT FILES ARE OPENED           ***
       002-OPEN-PARA.
            OPEN INPUT INFILE1.
            IF INFS1 NOT = '00'
            DISPLAY "ERROR IN OPEN INFILE1 : " INFS1
            PERFORM 009-CLOSE-PARA
            END-IF.
            OPEN INPUT INFILE2.
            IF INFS2 NOT = '00'
            DISPLAY "ERROR IN OPEN INFILE2 : " INFS2
            PERFORM 009-CLOSE-PARA
            END-IF.
            OPEN OUTPUT OUTFILE.
            IF OUTFS NOT = '00'
            DISPLAY "ERROR IN OPEN OUTFILE : " OUTFS
            END-IF.

             EXEC SQL
                  OPEN CUR_STU
             END-EXEC.
             IF SQLCODE NOT = 0 THEN
             DISPLAY "ERROR IN OPEN CURSOR" SQLCODE
             END-IF.

      *** READ PARA IS USED TO READ THE FIRST INFILE TO CHECK       ***
       003-READ-PARA.
            READ INFILE1 AT END PERFORM 005-FETCH-PARA.

            IF INFS1 NOT = '00' THEN
               DISPLAY "ERROR IN READING INFILE1: " INFS1
               PERFORM 009-CLOSE-PARA
            ELSE
               PERFORM 031-CHECK-PARA
            END-IF.

      *** CHECK PARA IS TO CHECK WEATHER THE FILE IS IN FILE2       ***
       031-CHECK-PARA.
            READ INFILE2 AT END SET IN2-EOF TO TRUE
            NOT AT END
            IF FS-ID = IS-ID THEN
               DISPLAY "INSERT PROCEED"
               PERFORM 004-INSERT-PARA
            ELSE
               DISPLAY "FILE NOT MATCH"
               PERFORM 032-LCHECK-PARA
            END-IF.

      *** LCHECK PARA IS TO CHECK WEATHER THE FILE IS PRESENT OR NOR ***
       032-LCHECK-PARA.
            READ INFILE2 PERFORM UNTIL FS-ID = IS-ID
            END-PERFORM.
            IF FS-ID = IS-ID THEN
            DISPLAY "FILE FOUND AT LCHECK"
            PERFORM 004-INSERT-PARA
            ELSE
            DISPLAY "FILE IS NOT PRESENT"
            END-IF.

      ***  HERE THE VALUES ARE INSERTED IN DATABASE TABLE           ***
       004-INSERT-PARA.
            MOVE FS-ID TO STUD-ID.
            MOVE FS-NAME TO STUD-NAME.
            MOVE FS-CLASS TO STUD-CLASS.
            MOVE IS-SUB1M TO STUD-MRK1.
            MOVE IS-SUB2M TO STUD-MRK2.
            MOVE IS-SUB3M TO STUD-MRK3.
            MOVE IS-SUB4M TO STUD-MRK4.
            MOVE IS-SUB5M TO STUD-MRK5.
            MOVE IS-SUB6M TO STUD-MRK6.

            EXEC SQL
                 INSERT INTO OZA062.STUDBLE VALUES(:STUD-ID,:STUD-NAME,
                     :STUD-CLASS,:STUD-MRK1,:STUD-MRK2,:STUD-MRK3,
                     :STUD-MRK4,:STUD-MRK5,:STUD-MRK6)
            END-EXEC.
            IF SQLCODE NOT = 0 THEN
              DISPLAY "ERROR SQLCODE: " SQLCODE
              PERFORM 009-CLOSE-PARA
            ELSE
              DISPLAY "INSERT SUCCESS"
            END-IF.

      ***  FETCH PARA IS USED TO FETCH THE VAUES FROM THE TABLE     ***
       005-FETCH-PARA.


             EXEC SQL
                  FETCH CUR_STU INTO :STUD-ID,:STUD-NAME,:STUD-CLASS,
                     :STUD-MRK1,:STUD-MRK2,:STUD-MRK3,:STUD-MRK4,
                     :STUD-MRK5,:STUD-MRK6
             END-EXEC.
             IF SQLCODE = 0 THEN
                 DISPLAY "FETCH SUCCESS"
                 MOVE STUD-MRK1 TO STUDMRK1
                 DISPLAY STUDMRK1
                 MOVE STUD-MRK2 TO STUDMRK2
                 MOVE STUD-MRK3 TO STUDMRK3
                 MOVE STUD-MRK4 TO STUDMRK4
                 MOVE STUD-MRK5 TO STUDMRK5
                 MOVE STUD-MRK6 TO STUDMRK6
                 PERFORM 006-CALC-PARA
             ELSE
                 DISPLAY "ERROR IN FETCH PARA"
                 PERFORM 009-CLOSE-PARA
             END-IF.

      *** CALC PARA IS USED TO CALCULATE THE VALUES FOR GRADE       ***
       006-CALC-PARA.
             IF STUDMRK1 > 35 AND STUDMRK2 > 35 THEN
                 IF STUDMRK3 > 35 AND STUDMRK4 > 35 THEN
                     IF STUDMRK5 > 35 AND STUDMRK6 > 35 THEN
                         DISPLAY "WRITE PARA"
                         PERFORM 007-WRITE-PARA
                      ELSE
                         DISPLAY "CALCULATION STARTED"
                         PERFORM 005-FETCH-PARA
                      END-IF
                 ELSE
                    PERFORM 005-FETCH-PARA
                 END-IF
             ELSE
                PERFORM 007-WRITE-PARA
             END-IF.
      *      EVALUATE STUD-MRK1 >= 35 ALSO STUD-MRK2 >= 35 ALSO
      *               STUD-MRK3 >= 35 ALSO STUD-MRK4 >= 35 ALSO
      *               STUD-MRK5 >= 35 ALSO STUD-MRK6 >= 35
      *         WHEN TRUE ALSO TRUE ALSO TRUE ALSO TRUE ALSO TRUE
      *              ALSO TRUE PERFORM 007-WRITE-PARA
      *         WHEN OTHER PERFORM 005-FETCH-PARA
      *      END-EVALUATE.

      *** WRIRE PARA HERE THE VALUES ARE WRITTEN INTO THE OUFILE    ***
       007-WRITE-PARA.
              DISPLAY "WRITING STARTED".
              COMPUTE TOTAL-M = STUDMRK1 + STUDMRK2 + STUDMRK3 +
                                STUDMRK4 + STUDMRK5 + STUDMRK6.
              COMPUTE AVG-M = TOTAL-M / 6.

              EVALUATE AVG-M
                  WHEN 35 THRU 60 MOVE 'C' TO GRADE-M
                  WHEN 61 THRU 70 MOVE 'B' TO GRADE-M
                  WHEN 71 THRU 90 MOVE 'A' TO GRADE-M
                  WHEN 91 THRU 100 MOVE 'A+' TO GRADE-M
              END-EVALUATE.

              MOVE STUD-ID TO OS-ID.
              MOVE STUD-NAME TO OS-NAME.
              MOVE STUD-CLASS TO OS-CLASS.
              MOVE TOTAL-M TO OS-TOTAL.
              MOVE GRADE-M TO OS-GRADE.
              WRITE FS-OUTREC.
              PERFORM 005-FETCH-PARA.

      ***         HERE THE END OF FILE AND TABLE                   ***
       009-CLOSE-PARA.
              EXEC SQL
                   CLOSE CUR_STU
              END-EXEC.

              CLOSE INFILE1 INFILE2 OUTFILE.
              STOP RUN.

Saturday, 15 June 2013

Important tables in CICS

PPT - Processing Program Table
                Define application programs and BMS maps in this table. We define program names in this table to make CICS to identify programs.

PCT - Program Control Table
                Define TransactionID (1 to 4 characters) eg: "A054" for main program which executes input data comming from front end or other source. Here we give program name and corresponding TransactionID by which this program can get executed.
When user enters TransID on the terminal, CICS checks this table to get the corresponding program to be executed.

FCT - File Control Table
               Define files used in the CICS program.
All the files being used in our programs needs to be registered in this table.

TST - Temporary Storage Table
               Define TSQ's used in CICS program.

DCT - Destination Control Table
               Define TDQ's used in CICS program.

RCT - Resource Control Table
               Define DB2 plan details that are created during the compile and execution of the source program.

Difference between Plan & Package

Difference between Plan & Package
Both contain optimized code for SQL statements - a package for a single program, module or subroutine contained in the data base request module (DBRM) library. A plan may contain multiple packages and pointers to packages.
A plan is an executable module containing the access path logic produced by the DB2 optimizer. It can be composed of one or more DBRMs and packages. Before a DB2 for Z\OS program(with static SQL) can be run, it must have a plan associated with it.
Plans are created by the BIND command. The plan is stored in the DB2 directory and accessed when its program is run. Information about the plan is stored in the DB2 catalog.
A package is a single, bound DBRM with optimized access paths. By using packages, the table access logic is "packed" at a lower level of granularity than a plan--at the package(or program) level.
To execute a package, you first must include it in the package list of a plan. Packages are not directly executed, they are only indirectly executed when the plan in which they are contained executes--as discussed previously, UDFs and triggers are execeptions to this rule. A plan can consist of one or more DBRMs, one or more packages or, a combination of packages and DBRMs.

COBOL-DB2 compilation process

Step 1- DB2 PRECOMPILE
The DB2 Precompile performs three functions.
  • It checks the SQL in the program for errors.
  • It adds working storage areas and source code compatible statements that are used to invoke DB2. One of the working storage areas contains a literal "timestamp" called a consistency token.
  • Finally, all the SQL statements are extracted from the program source and places into a member called the DataBase Request Module(DBRM), which also contains the consistency token.
Step 2- COMPILE
The modified source from the precompile is then compiled. The code is checked for errors, and a compiled version of the code is created.

Step 3- LINK-EDIT
The compiled code is link-edited along with statically called source language and DB2 run-time modules to create a Load Module. Imbedded in this module is the same consistency token that was generated in the precompile. If multiple DB2 module contains a consistency token for each one.

Step 4- DB2 BIND
The bind process reads the DBRM that was created in the precompile and prepares an access path to the data. This access path, along with the consistency token is stored in the DB2 catalog as a package. Every package is bound into a package List, or a collection. The name of the Collection is specified by the PACKAGE parameter. A collection is a group of packages that are included in one or more plans. The QUALIFIER parameter of the bind is used to direct the SQL to the specific set of DB2 objects(tables, Views, aliases or synonyms) qualified by this name.

EXECUTION COBOL-DB2 PROGRAM
When COBOL-DB2 program executes, the plan name must be specified. For online CICS programs, the plan name is specified  by Tran ID in the Resource Control Table(RCT). For a batch program, the plan name is specified in the SYSTSIN input DD. The packages for all DB2 programs executed under a Tran ID or batch job step must be included in collection bound into this plan. When the first SQL statement of each program is executed, DB2 searches the collections within the plan using the package name and consistency token from the load module. If an exact match is not found a -805 SQLCODE is returned.

Expense Handler Application with advance technologies

Budget Planner  One of the application developed with Ionic 4 and Python-Flask.  Ionic 4 code:  https://github.com/logeshbuiltin/Expense...