Showing posts with label JCL Tutorial. Show all posts
Showing posts with label JCL Tutorial. Show all posts

Sunday, 25 May 2014

JCL Interview Questions

Post By: Hanan Mannan
Contact Number: Pak (+92)-321-59-95-634
-------------------------------------------------------

JCL Interview Questions

1) There is a concatenated input DD name with 3 datasets. How to override only one dataset in those 3 datasets?
Specify DD DUMMY in the overriding JCL for the ones, which are not overridden.
//STEP1.IN1 DD DUMMY
//   DD DSN=MYDATA.URMI.IN2,DISP=SHR
//  DD DUMMY

2) Current version of a GDG is used as input in step1 of a job and a new version is created as output. The output of step1 is used in step2 and the next version is created as output in step2. How do you reference each GDG version in each step?
Step1 input: (0)
Step1 output: (+1)
Step2 input: (+1)
Step2 output: (+2) 

3) How can you check if a file is empty using JCL?
When the file is used as input in IDCAMS, job completes with a warning (return code 4) if the file is empty.

4) A JCL has 4 steps and job abends. How to restart the job and run only step 2?
Specify RESTART=STEP2 in JOB statement. And include IF-THEN-ELSE construct as below:
//URMIIF JOB 1,CLASS=6,MSGCLASS=0,NOTIFY=&SYSUID,RESTART=STEP2
//*
//STEP1   EXEC
//STEP2   EXEC
//IF1     IF (STEP2.RC = 0 & STEP2.RC <> 0) THEN
//STEP3      EXEC
//STEP4      EXEC
//        ENDIF          
Another solution is to use COND=((0,EQ,STEP2),(0,NE,STEP2)) for step3 and step4.

5) What are the ways of passing data to a COBOL program from JCL?
Data can be passed to a COBOL program through files, PARM parameter and SYSIN DD statement.

6) How can the same PROC be re-used and called by many JOBs?
The varying portion of the JCL can be specified using symbolic parameters in the JOB and the static parts can be specified in the PROC. For example, if the file name changes for every JOB that uses the PROC, then the varying portion of the file name can be coded in JCL using symbolic parameter.
//IN1 DD DSN=&ID.URMI.IN1,DISP=SHR  //*Coded in PROC

ID=MYDATA1 is coded in JOB1, ID=MYDATA2 is coded in JOB2 and so on

7) How do you create a dataset in a JCL with the same file organisation as that of another existing dataset?
Use IEBGENER and pass existing file in SYSUT1. Pass new file in SYSUT2 and mention DCB=*.SYSUT1 to get the same DCB as that of SYSUT1 dataset. Refer to Basic Sort Tricks chapter for IEBGENER example.

8) How do you access an uncataloged dataset in a JCL?
By using the UNIT and VOL serial parameters in the dataset DD statement.

9) What are the statements that are not valid to be included in an INCLUDE statement?
Dummy DD statements, data card specifications, PROCs, JOB, PROC statements cannot be coded within an INCLUDE member. An INLCUDE statement can be coded within an INCLUDE member and further nesting can be done up to 15 levels.

10) A JCL has 2 steps. How to code the JCL such that if step1 abends, then step2 runs. Else, job terminates with step1?
Code COND=ONLY in STEP2

11) How to do automated RESTART when a job abends?
Using RD parameter in JOB/EXEC statement. The abend codes for which RESTART need to be performed can be mentioned in the SCHEDxx member of the IBM system parmlib library.

12) A JCL has 10 steps. How to run step3 and step7 (only) without using COND parameter or IF-THEN-ELSE?
//STEP001  EXEC PGM=IEBEDIT                                   
//SYSUT1   DD  DSN=MYDATA.URMI.JOBS(INPUTJOB),DISP=SHR    
//SYSUT2   DD  SYSOUT=(*,INTRDR)                              
//SYSPRINT DD  SYSOUT=*                                       
//SYSIN    DD  *                                              
  EDIT TYPE=INCLUDE,STEPNAME=(STEP3,STEP7)                        
/*  
Using IEBEDIT in a JCL, selected steps of another JCL can be run. In the above JCL, the input JCL with 10 steps is present in MYDATA.URMI.JOBS(INPUTJOB). STEP3 and STEP7 is specified in SYSIN of IEBEDIT, so that those two steps are run.

13) When does a dataset go uncataloged?
When it is defined with DISP=(NEW,KEEP) at the time of creation.
In case of a GDG, least recent generation is uncataloged if the GDG base had been defined with NOEMPTY parameter when the LIMIT is reached. All generations are uncataloged when coded with EMPTY.

14) How can a GDG base be created in a JCL. What is the difference between EMPTY and SCRATCH parameter while defining/altering GDG base?
GDG base can be created using IDCAMS utility. EMPTY uncataloges all the generations when the LIMIT is reached. SCRATCH physically deletes the generation, when it is uncataloged. (LIMIT specifies the maximum number of versions that the GDG base can hold).

15) A dataset contains 2500 records. How can the last 1500 records copied to an output file?
//JSTEP020 EXEC PGM=ICETOOL                                          
//TOOLMSG  DD SYSOUT=*                                               
//DFSMSG   DD SYSOUT=*                                               
//IN1      DD DSN=MYDATA.URMI.SKIPREC,DISP=SHR    
//OUT1    DD SYSOUT=*
//TOOLIN   DD *                                                      
  COPY FROM(IN1) TO(OUT1) USING(CTL1)                                  
/*
//CTL1CNTL DD *                        
  SORT FIELDS = COPY
  SKIPREC = 1000               
/*     
In the SORT/ICETOOL program, SKIPREC = n can be used, which skips the first n records and then copies the rest to the output file.

16) How can a file of 3n records be split into 3 files each containing n records?
//URMISPLT EXEC PGM=SORT 
//SORTIN   DD DSN=MYDATA.URMI.FILEIN,DISP=SHR 
//SORTOF01 DD DSN=MYDATA.URMI.FILEOUT1, 
//            DISP=(NEW,CATLG,DELETE),
//            RECFM=FB,LRECL=50 
//SORTOF02 DD DSN=MYDATA.URMI.FILEOUT2,
//            DISP=(NEW,CATLG,DELETE),
//            RECFM=FB,LRECL=50 
//SORTOF03 DD DSN=MYDATA.URMI.FILEOUT3, 
//            DISP=(NEW,CATLG,DELETE),
//            RECFM=FB,LRECL=50 
//SYSPRINT DD SYSOUT=* 
//SYSOUT   DD SYSOUT=* 
//SYSUDUMP DD SYSOUT=* 
//SYSIN DD *      
  SORT FIELDS=COPY 
  OUTFIL FILES=01,ENDREC=100  //*assuming input file has 300 records.
  OUTFIL FILES=02,STARTREC=101,ENDREC=200 
  OUTFIL FILES=03,STARTREC=201 
//*
STARTREC and ENDREC restricts the READ from the input file on the specified record number.

17) When can a job time-out occur? How to overcome that?
A job time-out error can occur when the program takes more time than the time limit for the specified class. This is called a S322 abend. This error is encountered when there are some looping errors in the program and it does not reach completion.
If the data processed in the program is genuinely huge and needs more time than the class limit, then the TIME parameter can be coded as TIME=1440 to get infinite time until job completion.

18) In a JCL, a large volume dataset is loaded to a table using BMCLOAD in STEP1 and an image copy of the loaded table is taken using BMCCOPY in step2. Step2 abends because the image copy dataset cannot hold the volume of the table. How can this be rectified?
The SPACE parameter of the image copy dataset can be increased based on the volume of the table and the job can be restarted from step2.

19) If the submitter of a job wants to inform another user about the job completion, how can it be done?
NOTIFY=userid of the person (not the submitter) can be specified in the JOB statement so that the user gets a notification with the return code upon job completion. But the job log is present in the spool under the submitter's userid only.

20) How can a FB file converted to VB file using SORT program?
FTOV option in SORT helps in converting FB to VB file.
//URMIFTOV EXEC PGM=SORT 
//SORTIN   DD *
  123*******
  4560000000
  123****123
  789
//SORTOF01 DD DSN=MYDATA.URMI.FILEOUT1, 
//            DISP=(NEW,CATLG,DELETE),
//            RECFM=VB,LRECL=54
//SORTOF02 DD DSN=MYDATA.URMI.FILEOUT2,
//            DISP=(NEW,CATLG,DELETE),
//            RECFM=VB,LRECL=54 
//SORTOF03 DD DSN=MYDATA.URMI.FILEOUT3, 
//            DISP=(NEW,CATLG,DELETE),
//            RECFM=VB,LRECL=54 
//SYSPRINT DD SYSOUT=* 
//SYSOUT   DD SYSOUT=* 
//SYSUDUMP DD SYSOUT=* 
//SYSIN DD *      
  SORT FIELDS=COPY 
  OUTFIL FNAMES=SORTOF01,FTOV,VLTRIM=C'*' //*removes trailing '*'
  OUTFIL FNAMES=SORTOF02,FTOV,VLTRIM=X'40'//*removes trailing space
  OUTFIL FNAMES=SORTOF03,FTOV,VLTRIM=X'00'//*removes trailing zeros
//*
The output will be:
SORTOF01:
123                   //*Trailing '*' removed
4560000000
123****123
789

SORTOF02:
123*******            //*Trailing spaces removed
4560000000
123****123
789

SORTOF03:
123*******
4560                 //*Trailing zeroes removed
123****123
789

Posted By MIrza Abdul Hannan6:05:00 am

JCL - Basic Sort Tricks

Filled under:

Post By: Hanan Mannan
Contact Number: Pak (+92)-321-59-95-634
-------------------------------------------------------

JCL - Basic Sort Tricks

The day-to-day application requirements in a corporate world that can be achieved using Utility Programs are illustrated below:
1. A file has 100 records. The first 10 records need to be written to output file.
//JSTEP020 EXEC PGM=ICETOOL                                          
//TOOLMSG  DD SYSOUT=*                                               
//DFSMSG   DD SYSOUT=*                                               
//IN1      DD DSN=MYDATA.URMI.STOPAFT,DISP=SHR    
//OUT1    DD SYSOUT=*
//TOOLIN   DD *                                                      
  COPY FROM(IN1) TO(OUT1) USING(CTL1)                                  
/*
//CTL1CNTL DD *                        
  OPTION STOPAFT=10               
/*     
The option STOPAFT will stop reading the input file after 10th record and terminates the program. Hence, 10 records are written to output.

2. Input file has one or more records for same employee number. Write unique records to output.
//STEP010  EXEC PGM=SORT 
//SYSOUT   DD SYSOUT=*                                                
//SORTIN   DD DSN=MYDATA.URMI.DUPIN,DISP=SHR
//SORTOUT  DD SYSOUT=*
//SYSIN    DD *            
  SORT FIELDS=(1,15,ZD,A) 
  SUM FIELDS=NONE          
/*                         
SUM FIELDS=NONE removes duplicates on fields specified in SORT FIELDS. In the above example, employee number is in the field position 1,15. The output file will contain the unique employee numbers sorted in ascending order.

3. Overwrite input record content.
//JSTEP010 EXEC PGM=SORT                                             
//SORTIN   DD DSN= MYDATA.URMI.SAMPLE.MAIN,DISP=SHR       
//SORTOUT  DD SYSOUT=*                 
//SYSPRINT DD SYSOUT=*                                               
//SYSOUT   DD SYSOUT=*                                               
//SYSIN    DD *                                                      
 OPTION COPY                                                         
  INREC OVERLAY=(47:1,6)                      
/*                        
In the input file, the content in position 1,6 is overwritten to the position 47,6 and then copied to the output file. INREC OVERLAY operation is used in order to rewrite data in input file before copying to output.

4. Adding a sequence number to the output file.
//JSTEP010 EXEC PGM=SORT                                             
//SORTIN   DD *
  data1
  data2
  data3
/*
//SORTOUT  DD SYSOUT=*                 
//SYSPRINT DD SYSOUT=*                                               
//SYSOUT   DD SYSOUT=*                                               
//SYSIN    DD *                                                      
 OPTION COPY                                                         
 BUILD=(1:1,5,10:SEQNUM,4,ZD,START=1000,INCR=2)                      
/*                        
The output will be:
data1    1000
data2    1002
data3    1004
4-digit sequence number is added in output at position 10, starting at 1000 and incremented by 2 for every record.

5. Adding Header/Trailer to output file.
//JSTEP010 EXEC PGM=SORT                                             
//SORTIN   DD *
  data1
  data2
  data3
/*
//SORTOUT  DD SYSOUT=*                 
//SYSPRINT DD SYSOUT=*                                               
//SYSOUT   DD SYSOUT=*                                               
//SYSIN    DD *                                                      
 SORT FIELDS=COPY                                                     
  OUTFIL REMOVECC,                                                     
  HEADER1=(1:C'HDR',10:X'020110131C'),                    
  TRAILER1=(1:C'TRL',TOT=(10,9,PD,TO=PD,LENGTH=9)) 
/*                        
The output will be:
HDR       20110131
data1    
data2    
data3 
TRL       000000003
TOT calculates the number of records in the input file. HDR and TRL are added as identifiers to header/trailer, which is user defined and can be customised as per the users' needs.

6. Conditional Processing
//JSTEP010 EXEC PGM=SORT                                             
//SORTIN   DD *
  data1select
  data2
  data3select
/*
//SORTOUT  DD SYSOUT=*                 
//SYSPRINT DD SYSOUT=*                                               
//SYSOUT   DD SYSOUT=*                                               
//SYSIN    DD *           
  INREC  IFTHEN=(WHEN=(6,1,CH,NE,C' '),BUILD=(1:1,15),
         IFTHEN=(WHEN=(6,1,CH,EQ,C' '),BUILD=(1:1,5,7:C'EMPTY    ') 
  OPTION COPY                                                     
/*                        
The output will be:
data1select   
data2 EMPTY  
data3select
Based on the 6th position of the file, the BUILD of output file varies. If 6th position is SPACES, then text "EMPTY" is appended to input record. Else, the input record is written to output, as-is.

7. Backing up a file
//JSTEP001 EXEC PGM=IEBGENER                                       
//SYSPRINT DD SYSOUT=*                                             
//SYSIN    DD *                                                    
//SYSOUT   DD SYSOUT=*                                             
//SORTOUT  DD DUMMY                                                
//SYSUT1   DD DSN=MYDATA.URMI.ORIG,DISP=SHR                     
//SYSUT2   DD DSN=MYDATA.URMI.BACKUP,DISP=(NEW,CATLG,DELETE),
//             DCB=*.SYSUT1,SPACE=(CYL,(50,1),RLSE)      
IEBGENER copies the file in SYSUT1 to file in SYSUT2. Please note that file in SYSUT2 takes the same DCB as that of the SYSUT1 in the above example.

8. File Comparison
//STEP010  EXEC PGM=SORT                                              
//MAIN     DD *
  1000
  1001
  1003
  1005
//LOOKUP   DD *
  1000
  1002
  1003
//MATCH    DD DSN=MYDATA.URMI.SAMPLE.MATCH,DISP=OLD
//NOMATCH1 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH1,DISP=OLD
//NOMATCH2 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH2,DISP=OLD 
//SYSOUT   DD SYSOUT=*                                                       
//SYSIN    DD *                                                       
  JOINKEYS F1=MAIN,FIELDS=(1,4,A)                            
  JOINKEYS F2=LOOKUP,FIELDS=(1,4,A)                               
  JOIN UNPAIRED,F1,F2                                                 
  REFORMAT FIELDS=(?,F1:1,4,F2:1,4)                                
  OPTION COPY                                                         
  OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,4)                                                
  OUTFIL FNAMES=NOMATCH1,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,4) 
  OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:2,4) 
/*                                                                             
  • JOINKEYS specifies the field on which the two files are compared.
  • REFORMAT FIELDS=? places 'B' (matched records), '1' (present in file1, but not in file2), or '2' (present in file2 but not in file1) in the 1st position of the output BUILD.
  • JOIN UNPAIRED does a full outer join on the two files.
The output will be:
MATCH File
1000
1003

NOMATCH1 File
1001
1005

NOMATCH2 File
1002
The same functionality can be achieved using ICETOOL also.

Posted By MIrza Abdul Hannan6:03:00 am

JCL - Utility Programs

Filled under:

Post By: Hanan Mannan
Contact Number: Pak (+92)-321-59-95-634
-------------------------------------------------------

JCL - Utility Programs

IBM Dataset Utilities

Utility programs are pre-written programs, widely used in mainframes by system programmers and application developers to achieve day-to-day requirements, organising and maintaining data. A few of them are listed below with their functionality:
Utility NameFunctionality
IEHMOVE
Moves or copies sequential datasets.
IEHPROGM
Deleting and renaming datasets; catalog or uncatalog datasets other than VSAM.
IEHCOMPR
Compares data in sequential datasets.
IEBCOPY
Copy, Merge, compress, back-up or restore PDS.
IEFBR14
No operation utility. Used to return control to user and terminate. It is usually used to create empty dataset or delete an existing dataset.
For example, if a dataset is passed as input to a IEFBR14 program with DISP=(OLD,DELETE,DELETE), the dataset is deleted at job completion.
IEBEDIT
Used to copy selected parts of a JCL. For Example, if a JCL has 5 steps and we require to execute step 1 and 3 only, then a IEBEDIT JCL can be coded with a dataset which contains the actual JCL to be executed. In the SYSIN of IEBEDIT, we can specify STEP1 and STEP3 as parameters. When this JCL is executed, it executes the STEP1 and STEP3 of the actual JCL.
IDCAMS
Create, delete, rename, catalog, uncatalog datasets (other than PDS). Usually used to manage VSAM datasets.
These utility programs need to be used with appropriate DD statements in a JCL in order to achieve the specified functionality.

DFSORT Overview

DFSORT is a powerful IBM utility used to copy, sort or merge datasets. SORTIN and SORTINnn DD statements are used to specify input datasets. SORTOUT and OUTFIL statements are used to specify output data.
SYSIN DD statement is used to specify the sort and merge conditions. DFSORT is generally used to achieve the below functionalities:
  • SORT the input file(s) in the order of the specified field(s) position in the file.
  • INCLUDE or OMIT records from the input file(s) based on the specified condition.
  • SORT MERGE input file(s) in the order of the specified field(s) position in the file.
  • SORT JOIN two or more input files based on a specified JOIN KEY (field(s) in each input file).
  • When there is additional processing to be done on the input files, a USER EXIT program can be called from the SORT program. For example, if there is a header/trailer to be added to the output file, then a USER written COBOL program can be called from the SORT program to perform this functionality. Using a control card, data can be passed to the COBOL program.
  • On the other way round, a SORT can be called internally from a COBOL program to arrange the input file in a particular order before being processed. Usually, this is not recommended in view of performance for large files.

ICETOOL Overview

ICETOOL is a multi-purpose DFSORT utility used to perform a variety of operations on datasets. Input and output datasets can be defined using user defined DD names. The file operations are specified in the TOOLIN DD statement. Additional conditions can be specified in user defined 'CTL' DD statements.
Few of the utilities of ICETOOL are given below:
  • ICETOOL can achieve all the functionalities of DFSORT in one or more conditions.
  • SPLICE is a powerful operation of ICETOOL which is similar to SORT JOIN, but with additional features. It can compare two or more files on specified field(s) and create one or more output files like file with matching records, file with non-matching records, etc.
  • Data in one file in a particular position can be OVERLAYed into another position in the same or different file.
  • A File can be split into n files based on a specified condition. For example, a file containing names of employees can be split into 26 files, each containing the names starting with A, B, C and so on.
  • Different combination of file manipulation is possible using ICETOOL with a little exploration of the tool.

SYNCSORT Overview

SYNCSORT is used to copy, merge or sort datasets with a high performance. It gives best utilization of system resources and efficient operation in 31-bit and 64-bit address spaces.
It can be used in the same lines of DFSORT and can achieve the same features. It can be invoked by a JCL or from within a program coded in COBOL, PL/1 or Assembler language. It also supports User Exit programs to be called from the SYNCSORT program.
Frequently used sort tricks using these utilities are explained in the next chapter. Complex requirements, which requires a huge programming in COBOL/ASSEMBLER can be achieved using the above utilities in simple steps.

Posted By MIrza Abdul Hannan6:02:00 am

Running COBOL Programs using JCL

Filled under:

Post By: Hanan Mannan
Contact Number: Pak (+92)-321-59-95-634
-------------------------------------------------------

Running COBOL Programs using JCL

Compiling COBOL Programs

In order to execute a COBOL program in batch mode using JCL, the program needs to be compiled and a load module is created with all the sub-programs. The JCL uses the load module and not the actual program at the time of execution. The load libraries are concatenated and given to the JCL at the time of execution using JCLLIB or STEPLIB.
There are many mainframe compiler utilities available to compile a COBOL program. Some corporate companies use Change Management tools like Endevor, which compiles and stores every version of the program. This is useful in tracking the changes made to the program.
//COMPILE   JOB ,CLASS=6,MSGCLASS=X,NOTIFY=&SYSUID             
//*            
//STEP1     EXEC IGYCRCTL,PARM=RMODE,DYNAM,SSRANGE
//SYSIN     DD DSN=MYDATA.URMI.SOURCES(MYCOBB),DISP=SHR
//SYSLIB    DD DSN=MYDATA.URMI.COPYBOOK(MYCOPY),DISP=SHR
//SYSLMOD   DD DSN=MYDATA.URMI.LOAD(MYCOBB),DISP=SHR
//SYSPRINT  DD SYSOUT=*
//*
IGYCRCTL is an IBM COBOL compiler utility. The compiler options are passed using PARM parameter. In the above example, RMODE instructs the compiler to use relative addressing mode in the program. The COBOL program is passed using SYSIN parameter and the copybook is the library used by the program in SYSLIB.
This JCL produces the load module of the program as output which is used as the input to the execution JCL.

Running COBOL Programs

Below a JCL example where the program MYPROG is executed using the input file MYDATA.URMI.INPUT and produces two output files written to the spool.
//COBBSTEP  JOB CLASS=6,NOTIFY=&SYSUID
//
//STEP10    EXEC PGM=MYPROG,PARM=ACCT5000
//STEPLIB   DD DSN=MYDATA.URMI.LOADLIB,DISP=SHR
//INPUT1    DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1      DD SYSOUT=*
//OUT2      DD SYSOUT=*
//SYSIN     DD *
//CUST1     1000
//CUST2     1001
/*
The load module of MYPROG is located in MYDATA.URMI.LOADLIB. This is important to note that the above JCL can be used for a non-DB2 COBOL module only.

Passing Data to COBOL Programs

Data input to COBOL batch program can be through files, PARAM parameter and SYSIN DD statement. In the above example:
  • Data records are passed to MYPROG through file MYDATA.URMI.INPUT. This file will be referred in the program using the DD name INPUT1. The file can be opened, read and closed in the program.
  • The PARM parameter data ACCT5000 is received in the LINKAGE section of the program MYPROG in a variable defined within that section.
  • The data in the SYSIN statement is received through ACCEPT statement in the PROCEDURE division of the program. Every ACCEPT statement reads one whole record (i.e., CUST1 1000) into a working storage variable defined in the program.

Running a COBOL-DB2 program

For running COBOL DB2 program, specialised IBM utility is used in the JCL and program; DB2 region and required parameters are passed as input to the utility.
The below steps are followed in running a COBOL-DB2 program:
  • When a COBOL-DB2 program is compiled, a DBRM (Database Request Module) is created along with the load module. The DBRM contains the SQL statements of the COBOL programs with its syntax checked to be correct.
  • The DBRM is bound to the DB2 region (environment) in which the COBOL will run. This can be done using the IKJEFT01 utility in a JCL.
  • After the bind step, the COBOL-DB2 program is run using IKJEFT01 (again) with the load library and DBRM library as the input to the JCL.
//STEP001  EXEC PGM=IKJEFT01
//*
//STEPLIB  DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
    DSN SYSTEM(SSID)
    RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) -
    LIB('MYDATA.URMI.LOADLIB')
    END
/*

Posted By MIrza Abdul Hannan6:01:00 am