We pass data from JCL to cobol program in two ways:
1. Using the PARM keyword
2. Using SYSIN DD in JCL
The basic difference between these two ways of passing are as follows:
2. Using SYSIN DD in JCL
The basic difference between these two ways of passing are as follows:
A. Using 'PARM=' on the exec keyword, we can pass only 100 characters of data. Also in cobol we need linkage section to take the values in.
B. When we pass data through SYSIN, we need to have the accept keyword in COBOL. For each row in SYSIN, we need to have corresponding ACCEPT verb in cobol.
Sample cobol program accepting PARM value through linkage
...
......
LINKAGE SECTION.
...
......
LINKAGE SECTION.
01 LS-TEST-PARM.
05 LS-TEST-LENGTH PIC S9(04) USAGE COMP.
05 LS-VAR1 PIC 9(02).
05 LS-VAR2 PIC 9(02).
PROCEDURE DIVISION USING LS-TEST-PARM.
DISPLAY LS-VAR1.
DISPLAY LS-VAR2.
DISPLAY LS-TEST-LENGTH.
STOP RUN.
Have a look into the corresponding JCL.
//TTYYTST JOB(TEST),CLASS=I,MSGCLASS=X,MSGLEVEL=(1,1)
// NOTIFY=&SYSUID
//*
//JSTEP01 EXEC PGM=SAMPLE3,PARM='1211212'
//STEPLIB DD DSN=TEST.LOAD.LIB1,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
RESULT:
12
11
007
Sample program accepting data from SYSIN .
...
....
DATA DIVISION.
....
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TOTAL
05 WS-VAR1 PIC X(02).
05 WS-VAR2 PIC X(02).
PROCEDURE DIVISION.
INITIALIZE WS-TOTAL.
ACCEPT WS-VAR1.
ACCEPT WS-VAR2.
DISPLAY WS-VAR1.
DISPLAY WS-VA22 .
Corresponding JCL:
//TTYAATST JOB(TEST),CLASS=I,MSGCLASS=X,MSGLEVEL=(1,1)
// NOTIFY=&SYSUID
//*
//JSTEP01 EXEC PGM=SAMPLE1
//STEPLIB DD DSN=TEST.LOAD.LIB1,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=
//sysin dd*
12
31
/*
//*
Result:
12
31
If we do not have any data to be passed we can make SYSIN DD DUMMY. I tried passing blank values via SYSIN. Was Expecting an abend, but it did not. It displayed spaces in SYSOUT.
good one...
ReplyDeleteFor passing data through the sysin dd*
ReplyDeleteSteplib is necessary?
Hi, no Steplib is not required to pass data thru SYSIN.
DeleteThe load module of the program was there in the library specified in my steplib.
thanks for the help.
ReplyDeleteNice Post !
ReplyDeleteCareer Advisor in Mumbai
I have a doubt in this, could you please help me out here
ReplyDeleteWhat happens if we start procedure division with out coding "USING LS-TEST-PARM" in the first example mentioned above?
Will it abend?
Will those parm value passed gets reflected in procedure division?