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.