JCL - Prosedur
Itu JCL Proceduresadalah kumpulan pernyataan di dalam JCL yang dikelompokkan bersama untuk menjalankan fungsi tertentu. Biasanya, bagian tetap dari JCL dikodekan dalam sebuah prosedur. Bagian yang berbeda dari Pekerjaan dikodekan di dalam JCL.
Anda dapat menggunakan prosedur untuk mencapai eksekusi paralel dari sebuah program menggunakan beberapa file input. JCL dapat dibuat untuk setiap file masukan, dan satu prosedur dapat dipanggil secara bersamaan dengan meneruskan nama file masukan sebagai parameter simbolik.
Sintaksis
Berikut adalah sintaks dasar dari definisi prosedur JCL:
//*
//Step-name EXEC procedure name
Isi prosedur disimpan dalam JCL untuk prosedur instream. Isi disimpan dalam anggota perpustakaan dasar yang berbeda untuk prosedur katalog. Bab ini akan menjelaskan dua jenis prosedur yang tersedia di JCL dan akhirnya kita akan melihat bagaimana kita dapat menyusun berbagai prosedur.
Prosedur Sela
Ketika prosedur dikodekan dalam anggota JCL yang sama, itu disebut Prosedur Sela. Ini harus dimulai dengan pernyataan PROC dan diakhiri dengan pernyataan PEND.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//INSTPROC PROC //*START OF PROCEDURE
//PROC1 EXEC PGM=SORT
//SORTIN DD DSN=&DSNAME,DISP=SHR
//SORTOUT DD SYSOUT=*MYINCL
//SYSOUT DD SYSOUT=*
//SYSIN DD DSN=&DATAC LRECL=80
// PEND //*END OF PROCEDURE
//*
//STEP1 EXEC INSTPROC,DSNME=MYDATA.URMI.INPUT1,
// DATAC=MYDATA.BASE.LIB1(DATA1)
//*
//STEP2 EXEC INSTPROC,DSNME=MYDATA.URMI.INPUT2
// DATAC=MYDATA.BASE.LIB1(DATA1)
//*
Dalam contoh di atas, prosedur INSTPROC dipanggil di LANGKAH1 dan LANGKAH2 menggunakan file input yang berbeda. Parameter DSNAME dan DATAC dapat dikodekan dengan nilai yang berbeda saat memanggil prosedur dan ini disebut sebagaisymbolic parameters. Input yang bervariasi ke JCL seperti nama file, kartu data, nilai PARM, dll., Diteruskan sebagai parameter simbolik ke prosedur.
Saat mengkode parameter simbolik, jangan gunakan KATA KUNCI, PARAMETER atau SUB-PARAMETER sebagai nama simbolik. Contoh: Jangan gunakan TIME = & TIME tetapi ya Anda bisa menggunakan TIME = & TM dan ini dianggap sebagai cara yang benar untuk mengkodekan simbolik.
Parameter simbolik yang ditentukan pengguna dipanggil JCL Symbols. Ada simbol tertentu yang disebutsystem symbols, yang digunakan untuk eksekusi tugas logon. Satu-satunya simbol sistem yang digunakan dalam pekerjaan batch oleh pengguna normal adalah&SYSUID dan ini digunakan dalam parameter NOTIFY di pernyataan JOB.
Prosedur Katalog
Ketika prosedur dipisahkan dari JCL dan dikodekan di penyimpanan data yang berbeda, itu disebut a Cataloged Procedure. Pernyataan PROC tidak wajib dikodekan dalam prosedur katalog. Berikut adalah contoh JCL yang memanggil prosedur CATLPROC:
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
Di sini, prosedur CATLPROC dikatalogkan di MYCOBOL.BASE.LIB1. PROG, DATAC dan DSNAME diteruskan sebagai parameter simbolik ke prosedur CATLPROC.
//CATLPROC PROC PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//PROC1 EXEC PGM=&PROG
//STEPLIB DD DSN=&BASELB,DISP=SHR
//IN1 DD DSN=&DSNAME,DISP=SHR
//OUT1 DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD DSN=&DATAC
//*
Di dalam prosedur, parameter simbolik PROG dan BASELB dikodekan. Harap dicatat bahwa parameter PROG di dalam prosedur diganti dengan nilai di JCL dan karenanya PGM mengambil nilai CATPRC1 selama eksekusi.
Prosedur Bersarang
Memanggil prosedur dari dalam suatu prosedur disebut a nested procedure. Prosedur dapat ditumpuk hingga 15 level. Penumpukan dapat sepenuhnya dalam aliran atau dikatalogkan. Kami tidak dapat membuat kode prosedur instream dalam prosedur katalog.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//SETNM SET DSNM1=INPUT1,DSNM2=OUTPUT1
//INSTPRC1 PROC //* START OF PROCEDURE 1
//STEP1 EXEC PGM=SORT,DISP=SHR
//SORTIN DD DSN=&DSNM1,DISP=SHR
//SORTOUT DD DSN=&DSNM2,DISP=(,PASS)
//SYSOUT DD SYSOUT=*
//SYSIN DD DSN=&DATAC
//*
//STEP2 EXEC PROC=INSTPRC2,DSNM2=MYDATA.URMI.OUTPUT2
// PEND //* END OF PROCEDURE 1
//*
//INSTPRC2 PROC //* START OF PROCEDURE 2
//STEP1 EXEC PGM=SORT
//SORTIN DD DSN=*.INSTPRC1.STEP1.SORTOUT
//SORTOUT DD DSN=&DSNM2,DISP=OLD
//SYSOUT DD SYSOUT=*
//SYSIN DD DSN=&DATAC
// PEND //* END OF PROCEDURE 2
//*
//JSTEP1 EXEC INSTPRC1,DSNM1=MYDATA.URMI.INPUT1,
// DATAC=MYDATA.BASE.LIB1(DATA1)
//*
Dalam contoh di atas, JCL memanggil prosedur INSTPRC1 di JSTEP1 dan prosedur INSTPRC2 dipanggil dalam prosedur INSTPRC1. Di sini, output INSTPRC1 (SORTOUT) diteruskan sebagai input (SORTIN) ke INSTPRC2.
SEBUAH SET statementdigunakan untuk mendefinisikan simbolik yang umum digunakan di seluruh langkah atau prosedur pekerjaan. Ini menginisialisasi nilai sebelumnya dalam nama simbolik. Ini harus didefinisikan sebelum penggunaan pertama dari nama simbolis di JCL.
Mari kita lihat uraian di bawah ini untuk memahami sedikit lebih banyak tentang program di atas:
Parameter SET menginisialisasi DSNM1 = INPUT1 dan DSNM2 = OUTPUT1.
Ketika INSTPRC1 dipanggil dalam JSTEP1 dari JCL, DSNM1 = MYDATA.URMI.INPUT1 dan DSNM2 = OUTPUT1., Yaitu, nilai yang diinisialisasi dalam pernyataan SET disetel ulang dengan nilai yang ditetapkan di salah satu langkah / prosedur pekerjaan.
Ketika INSTPRC2 dipanggil di LANGKAH2 dari INSTPRC1, DSNM1 = MYDATA.URMI.INPUT1 dan DSNM2 = MYDATA.URMI.OUTPUT2.