Sahana PGM
Sahana PGM
Sahana PGM
STEP 1::
*creating a input PS1 file of length 39.
CAR-NO: 9(6).
CAR-NAME : A(15).
CAR-COLOR : A(10).
CAR-PRICE : 9(8).
STEP 2 ::
*creating a input PS2 file of length 6.
CAR-NO: 9(6).
STEP 2::
*Creating dB2 table
STEP 3::
ID DIVISION.
-----------------------------------------------------------------------
PROGRAM-ID. PSDB2.
AUTHOR. ABCD.
DATE-WRITTEN. NOV 2020.
DATE COMPILED.
*----------------------------------------------------------------------*
* SYSTEM : LENOVO *
*----------------------------------------------------------------*
* MODULE : GROUP2 *
*----------------------------------------------------------------*
* TITLE : COBOL + DB2 *
*----------------------------------------------------------------*
* FUNCTION:
* 1. PS File 1 – driving i/p – Read this file record by record *
* 2. Restart file – PS File 2 - Read this filewhich will have the*
record number from where the processing should start *
* 3. Based on 2, start reading the PS file from the restart record
and update the DB2 table based on the info in the record. *
* Do a commit for every 10000 records. *
* Do error handling for file operations *
* Do error handling for SQL operations *
* Display the below statistics at the end of the program. *
* # of records read *
* # of records in restart file *
* # No of records that had a match *
* # No of records updated *
* # No of records that did not have a match *
*---------------------------------------------------------------------*
*
* MODIFICATIONS: *
*------------+-----------------+---------------------------------*
* DATE + AUTHOR + DESCRIPTION *
* ---- + ------ + ------------ *
*10/11/2020 + GROUP2 + ORIGINAL VERSION *
* 10/11/2020 + GROUP2 + INCLUDE TRANSACTION PROCESSED *
* + + DATE IN THE REPORT - ZB-3922. *
*------------+-----------------+---------------------------------*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PS1 ASSIGN TO SS1
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS DX.
SELECT PS2 ASSIGN TO SS2
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS DY.
DATA DIVISION.
FILE SECTION.
FD PS1.
01 IN-CAR-REC.
05 IN-CAR-NO PIC 9(6).
05 IN-CAR-NAME PIC A(15).
05 IN-CAR-COLOR PIC A(10).
05 IN-CAR-PRICE PIC 9(8).
FD PS2.
01 OUT-CAR-REC.
05 OUT-CAR-NO PIC 9(6).
WORKING-STORAGE SECTION.
77 DX PIC X(2) VALUE SPACES.
77 DY PIC X(2) VALUE SPACES.
77 EOF PIC X(1) VALUE 'N'.
77 EOC PIC X(1) VALUE 'N'.
77 RD-CT1 9(3) VALUE 0.
77 RD-CT2 9(3) VALUE 0.
77 RD-CT3 9(3) VALUE 0.
77 MT-CT 9(3) VALUE 0.
77 UP-CT 9(3) VALUE 0.
77 MS-CT 9(3) VALUE 0.
77 WR-CT 9(3) VALUE 0.
******************************************************************
* DCLGEN FOR DB2 *
******************************************************************
EXEC SQL
INCLUDE SJA
END-EXEC.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
*---------------------------------------------------------------*
*** CURSOR DECLARATION FOR FETCHING ALL PLANS ***
*---------------------------------------------------------------*
EXEC SQL
DECLARE SSA CURSOR FOR
SELECT CARNO , CARNAME ,CARCOLOR,CARPRICE
FROM CAR
WHERE CARNO = :CARNO
END-EXEC.
PROCEDURE DIVISION.
0010-MAIN-LINE.
DISPLAY '-------------->GROUP2 STARTS<-------------------'
PERFORM 1000-OPEN-PARA.
PERFORM 2000-PROCESS-PARA UNTIL EOF = 'Y'.
PERFORM 9000-CLOSE-PARA.
STOP RUN.
0010-EXIT.
EXIT.
*---------------------------------------------------------------*
* OPEN ALL FILES AND INITIALIZE THE NECESSARY VARIABLES *
*---------------------------------------------------------------*
1000-OPEN-PARA.
OPEN INPUT PS1, PS2.
IF DX NOT = '00' THEN
DISPLAY 'ERROR IN OPENING INPUT FILE ' dx
CALL 'ILLABANO'
END-IF.
IF DY NOT = '00' THEN
DISPLAY 'ERROR IN OPENING OUTPUT FILE' dy
CALL 'ILLABANO'
END-IF.
******************************************************************
* READ PS1 AND PS2*
******************************************************************
PERFORM 1100-READ-PARA.
1100-READ-PARA.
READ PS1 AT END MOVE 'Y' TO EOF.
IF DX = '00' THEN
COMPUTE RD-CT1= RD-CT1 + 1
ELSE
DISPLAY 'INPUT FILE READ IS FAILED' DX
CALL 'ILLABANO'
END-IF.
READ PS2 AT END MOVE 'Y' TO EOF.
IF DY = '00' THEN
COMPUTE RD-CT2= RD-CT2 + 1
ELSE
DISPLAY 'INPUT FILE READ IS FAILED' DY
CALL 'ILLABANO'
END-IF.
IF IN-CAR-NO = OUT-CAR-NO THEN
COMPUTE MT-CT = MT-CT + 1
PERFORM 1200-READ-SEQ-PARA
ELSE
COMPUTE MS-CT = MS-CT + 1
DISPLAY 'CAR NUMBERS ARE NOT MATCHING'
END-IF.
1200-READ-SEQ-PARA.
MOVE OUT-CAR-NO TO IN-CAR-NO.
READ PS1 NEXT RECORD AT END MOVE 'Y' TO EOF.
IF D1 = '00' THEN
NEXT SENTENCE
ELSE
DISPLAY 'CAN'T READ PS1'
END-IF.
COMPUTE RD-CNT3 = RD-CNT3 + 1.
*---------------------------------------------------------------*
* MAIN PROCESSING*
*---------------------------------------------------------------*
2000-PROCESS-PARA.
******************************************************************
* START RECORD WRITE *
******************************************************************
MOVE IN-CARNO TO :CARNO * PS TO (HOSTVARIABLE)
EXEC SQL
OPEN SSA
IF SQLCODE = '100' THEN
DISPLAY 'OPEN IS SUCCESS'
ELSE
DISPLAY 'NO RECORD'
END-EXEC.
MOVE IN-CAR-NAME TO CARNAME. *WE ARE ASSUMING CARNAME IS WRONG AND
WE ARE UPDATING THE CARNAME*
EXEC SQL
UPDATE CAR
SET CARNAME = : CARNAME
WHERE CARNO = :CARNO
END-EXEC.
COMPUTE UP-CT = UP-CT + 1.
EXEC SQL
COMMIT
END-EXEC.
EXEC SQL
OPEN SSA
IF SQLCODE = '100' THEN
DISPLAY 'UPDATE IS SUCCESS'
ELSE
DISPLAY 'NOT UPDATED'
END-EXEC.
EOC= ' '.
EXEC SQL
CLOSE SJA
END-EXEC.
IF SQLCODE = 0
NEXT SENTENCE
ELSE
DISPLAY SQLCODE
CALL ILLAB
END-IF.
PERFORM 1100-READ-PARA.
9000-CLOSE-PARA.
CLOSE PS1,PS2.
IF DX = '00' OR DY = '00' THEN
DISPLAY 'FILE CLOSE IS SUCCESSFULL'
ELSE
DISPLAY 'FILE CLOSE IS FAILED'
END-IF.DISPLAY SPACES
DISPLAY '***************************************'
DISPLAY '*** GROUP2 PROGRAM STATISTICS ***'
DISPLAY '***************************************'