JCL - Panduan Cepat

Kapan menggunakan JCL

JCL digunakan dalam lingkungan mainframe untuk bertindak sebagai komunikasi antara program (Contoh: COBOL, Assembler atau PL / I) dan sistem operasi. Dalam lingkungan mainframe, program dapat dijalankan dalam mode batch dan online. Contoh sistem batch dapat memproses transaksi bank melalui file VSAM (Metode Akses Penyimpanan Virtual) dan menerapkannya ke akun yang sesuai. Contoh sistem online dapat berupa layar back office yang digunakan oleh staf di bank untuk membuka rekening. Dalam mode batch, program dikirimkan ke sistem operasi sebagai pekerjaan melalui JCL.

Pemrosesan batch dan Online berbeda dalam aspek input, output, dan permintaan eksekusi program. Dalam pemrosesan batch, aspek-aspek ini dimasukkan ke dalam JCL yang kemudian diterima oleh Sistem Operasi.

Pemrosesan Pekerjaan

Pekerjaan adalah unit kerja yang dapat terdiri dari banyak langkah pekerjaan. Setiap langkah pekerjaan ditentukan dalam Bahasa Kontrol Pekerjaan (JCL) melalui serangkaian Pernyataan Kontrol Pekerjaan.

Sistem Operasi menggunakan Job Entry System (JES) untuk menerima pekerjaan ke dalam Sistem Operasi, untuk menjadwalkannya untuk diproses dan untuk mengontrol keluaran.

Pemrosesan pekerjaan melalui serangkaian langkah seperti berikut:

  • Job Submission - Mengirimkan JCL ke JES.

  • Job Conversion - JCL bersama dengan PROC diubah menjadi teks yang ditafsirkan untuk dipahami oleh JES dan disimpan ke dalam kumpulan data, yang kami sebut sebagai SPOOL.

  • Job Queuing -JES memutuskan prioritas pekerjaan berdasarkan parameter CLASS dan PRTY dalam pernyataan JOB (dijelaskan di bab Pernyataan JCL - JOB ). Kesalahan JCL diperiksa dan pekerjaan dijadwalkan ke dalam antrian pekerjaan jika tidak ada kesalahan.

  • Job Execution -Saat pekerjaan mencapai prioritas tertingginya, itu diambil untuk eksekusi dari antrian pekerjaan. JCL dibaca dari SPOOL, program dijalankan dan output diarahkan ke tujuan output yang sesuai seperti yang ditentukan dalam JCL.

  • Purging -Ketika pekerjaan selesai, sumber daya yang dialokasikan dan ruang JES SPOOL dilepaskan. Untuk menyimpan log pekerjaan, kita perlu menyalin log pekerjaan ke kumpulan data lain sebelum dirilis dari SPOOL.

Menginstal JCL di Windows / Linux

Ada banyak Emulator Mainframe Gratis yang tersedia untuk Windows yang dapat digunakan untuk menulis dan mempelajari JCL sampel.

Salah satu emulator tersebut adalah Hercules, yang dapat dengan mudah diinstal di Windows dengan mengikuti beberapa langkah sederhana berikut ini:

  • Unduh dan instal emulator Hercules, yang tersedia dari situs beranda Hercules -: www.hercules-390.eu

  • Setelah Anda menginstal paket pada mesin Windows, itu akan membuat folder seperti C:\Mainframes.

  • Jalankan Command Prompt (CMD) dan buka direktori C: \ Mainframes di CMD.

  • Panduan lengkap tentang berbagai perintah untuk menulis dan menjalankan JCL dapat ditemukan di URL www.jaymoseley.com/hercules/installmvs/instmvs2.htm

Hercules adalah implementasi perangkat lunak sumber terbuka dari arsitektur Sistem mainframe / 370 dan ESA / 390, selain dari 64-bit z / Arsitektur terbaru. Hercules berjalan di Linux, Windows, Solaris, FreeBSD, dan Mac OS X.

Menjalankan JCL di Mainframes

Seorang pengguna dapat terhubung ke server mainframe dengan beberapa cara seperti thin client, dummy terminal, Virtual Client System (VCS) atau Virtual Desktop System (VDS).

Setiap pengguna yang valid diberikan ID login untuk masuk ke antarmuka Z / OS (TSO / E atau ISPF). Di antarmuka Z / OS, JCL dapat dikodekan dan disimpan sebagai anggota dalam Partitioned Dataset (PDS). Ketika JCL diajukan, itu dijalankan dan output diterima seperti yang dijelaskan di bagian pemrosesan pekerjaan pada bab sebelumnya.

Struktur JCL

Struktur dasar JCL dengan pernyataan umum diberikan di bawah ini:

//SAMPJCL JOB 1,CLASS=6,MSGCLASS=0,NOTIFY=&SYSUID          (1)
//*                                                        (2)
//STEP010  EXEC PGM=SORT                                   (3) 
//SORTIN   DD DSN=JCL.SAMPLE.INPUT,DISP=SHR                (4)
//SORTOUT  DD DSN=JCL.SAMPLE.OUTPUT,                       (5)
//         DISP=(NEW,CATLG,CATLG),DATACLAS=DSIZE50                
//SYSOUT   DD SYSOUT=*                                     (6) 
//SYSUDUMP DD SYSOUT=C                                     (6) 
//SYSPRINT DD SYSOUT=*                                     (6) 
//SYSIN    DD *                                            (6) 
  SORT FIELDS=COPY                                    
  INCLUDE COND=(28,3,CH,EQ,C'XXX')                                    
/*                                                         (7)

Deskripsi Program

Pernyataan JCL bernomor telah dijelaskan di bawah ini:

(1) JOB statement - Menentukan informasi yang diperlukan untuk SPOOLing pekerjaan seperti id pekerjaan, prioritas eksekusi, id pengguna untuk diberitahu setelah menyelesaikan pekerjaan.

(2) //* statement - Ini adalah pernyataan komentar.

(3) EXEC statement- Menentukan PROC / Program yang akan dijalankan. Dalam contoh di atas, program SORT sedang dijalankan (yaitu, menyortir data input dalam urutan tertentu)

(4) Input DD statement- Menentukan jenis input yang akan diteruskan ke program yang disebutkan di (3). Dalam contoh di atas, file Physical Sequential (PS) dikirimkan sebagai input dalam mode bersama (DISP = SHR).

(5) Output DD statement- Menentukan jenis keluaran yang akan diproduksi oleh program pada saat eksekusi. Dalam contoh di atas, file PS dibuat. Jika pernyataan melampaui posisi ke-70 dalam satu baris, maka pernyataan itu dilanjutkan di baris berikutnya, yang harus dimulai dengan "//" diikuti dengan satu atau beberapa spasi.

(6)Ada jenis pernyataan DD lainnya untuk menentukan informasi tambahan untuk program (Dalam contoh di atas: Kondisi SORT ditentukan dalam pernyataan SYSIN DD) dan untuk menentukan tujuan untuk log kesalahan / eksekusi (Contoh: SYSUDUMP / SYSPRINT). Pernyataan DD dapat dimuat dalam kumpulan data (file mainframe) atau seperti data aliran (informasi yang di-hardcode dalam JCL) seperti yang diberikan dalam contoh di atas.

(7) /* menandai akhir dari data aliran.

Semua pernyataan JCL kecuali data dalam aliran dimulai dengan //. Harus ada setidaknya satu spasi sebelum dan sesudah kata kunci JOB, EXEC dan DD dan tidak boleh ada spasi di sisa pernyataan.

Jenis Parameter JOB

Setiap pernyataan JCL disertai dengan seperangkat parameter untuk membantu Sistem Operasi dalam menyelesaikan eksekusi program. Parameternya bisa dari dua jenis:

Parameter Posisi

  • Muncul pada posisi dan urutan yang telah ditentukan dalam pernyataan. Contoh: Parameter informasi akuntansi hanya dapat muncul setelahJOBkata kunci dan sebelum parameter nama programmer dan Parameter Kata Kunci. Jika parameter posisi dihilangkan, itu harus diganti dengan koma.

  • Parameter Posisi ada dalam pernyataan JOB dan EXEC. Dalam contoh di atas, PGM adalah parameter posisi yang dikodekan setelahEXEC kata kunci.

Parameter Kata Kunci

  • Mereka diberi kode setelah parameter posisi, tetapi dapat muncul dalam urutan apa pun. Parameter kata kunci dapat dihilangkan jika tidak diperlukan. Sintaks umum adalah KEYWORD = nilai . Contoh: MSGCLASS = X, yaitu log pekerjaan diarahkan ke output SPOOL setelah pekerjaan selesai.

  • Dalam contoh di atas, CLASS, MSGCLASS dan NOTIFY adalah parameter kata kunci dari pernyataan JOB. Ada juga parameter kata kunci dalam pernyataan EXEC.

Parameter ini telah dirinci pada bab-bab selanjutnya bersama dengan contoh yang sesuai.

Pernyataan JOB adalah pernyataan kontrol pertama dalam JCL. Ini memberikan identitas pekerjaan ke Sistem Operasi (OS), di spool dan di penjadwal. Parameter dalam pernyataan JOB membantu Sistem Operasi dalam mengalokasikan penjadwal yang tepat, waktu CPU yang dibutuhkan dan mengeluarkan pemberitahuan kepada pengguna.

Sintaksis

Berikut ini adalah sintaks dasar dari pernyataan JCL JOB:

//Job-name JOB Positional-param, Keyword-param

Deskripsi

Mari kita lihat deskripsi istilah yang digunakan dalam sintaks pernyataan JOB di atas.

Nama Pekerjaan

Ini memberikan id untuk pekerjaan saat mengirimkannya ke OS. Panjangnya bisa 1 sampai 8 dengan karakter alfanumerik dan dimulai tepat setelah //.

PEKERJAAN

Ini adalah kata kunci untuk mengidentifikasinya sebagai pernyataan JOB.

Posisi-param

Ada parameter posisi, yang bisa dari dua jenis:

Parameter Posisi Deskripsi
Account information Ini mengacu pada orang atau grup yang menerima waktu CPU. Ini diatur sesuai aturan perusahaan yang memiliki mainframe. Jika ditentukan sebagai (*), maka ini mengambil id pengguna, yang saat ini masuk ke Terminal Mainframe.
Programmer name Ini mengidentifikasi orang atau grup, yang bertanggung jawab atas JCL. Ini bukan parameter wajib dan dapat diganti dengan koma.

Kata kunci-param

Berikut adalah berbagai parameter kata kunci, yang dapat digunakan dalam pernyataan JOB. Anda dapat menggunakan satu atau lebih parameter berdasarkan persyaratan dan dipisahkan dengan koma:

Parameter Kata Kunci Deskripsi
CLASS

Berdasarkan durasi waktu dan jumlah sumber daya yang dibutuhkan oleh pekerjaan, perusahaan menetapkan kelas pekerjaan yang berbeda. Ini dapat divisualisasikan sebagai penjadwal individu yang digunakan oleh OS untuk menerima pekerjaan. Menempatkan pekerjaan di penjadwal yang tepat akan membantu pelaksanaan pekerjaan dengan mudah. Beberapa perusahaan memiliki kelas yang berbeda untuk pekerjaan di lingkungan pengujian dan produksi.

Nilai yang valid untuk parameter CLASS adalah karakter A hingga Z dan 0 hingga 9 numerik (dengan panjang 1). Berikut sintaksnya:

CLASS=0 to 9 | A to Z

PRTY

Untuk menentukan prioritas pekerjaan dalam kelas pekerjaan. Jika parameter ini tidak ditentukan, maka pekerjaan akan ditambahkan ke akhir antrian di CLASS yang ditentukan. Berikut sintaksnya:

PRTY=N

Dimana N adalah angka di antara 0 sampai 15 dan lebih tinggi angkanya, lebih tinggi adalah prioritas.

NOTIFY

Sistem mengirimkan pesan berhasil atau gagal (Kode Kondisi Maksimum) ke pengguna yang ditentukan dalam parameter ini. Berikut sintaksnya:

NOTIFY="userid | &SYSUID"

Di sini sistem mengirimkan pesan ke pengguna "userid" tetapi jika kita menggunakan NOTIFY = & SYSUID, maka pesan tersebut dikirim ke pengguna yang mengirimkan JCL.

MSGCLASS

Untuk menentukan tujuan keluaran untuk sistem dan pesan Pekerjaan saat pekerjaan selesai. Berikut sintaksnya:

MSGCLASS=CLASS

Nilai yang valid dari CLASS bisa dari "A" hingga "Z" dan "0" hingga "9". MSGCLASS = Y dapat diatur sebagai kelas untuk mengirim log pekerjaan ke JMR (JOBLOG Management and Retrieval: repositori dalam mainframe untuk menyimpan statistik pekerjaan).

MSGLEVEL

Menentukan jenis pesan yang akan ditulis ke tujuan keluaran yang ditentukan dalam MSGCLASS. Berikut sintaksnya:

MSGLEVEL=(ST, MSG)

ST = Jenis pernyataan yang ditulis ke log keluaran

  • Ketika ST = 0, Pernyataan Pekerjaan saja.

  • Ketika ST = 1, JCL bersama dengan parameter simbolik diperluas.

  • Saat ST = 2, Masukkan JCL saja.

MSG = Jenis pesan yang ditulis ke log keluaran.

  • Ketika MSG = 0, pesan Alokasi dan Penghentian ditulis setelah pekerjaan selesai tidak normal.

  • Ketika MSG = 1, pesan Alokasi dan Penghentian ditulis terlepas dari sifat penyelesaian pekerjaan.

TYPRUN

Menentukan pemrosesan khusus untuk pekerjaan itu. Berikut sintaksnya:

TYPRUN = SCAN | HOLD

Dimana SCAN dan HOLD memiliki deskripsi sebagai berikut

  • TYPRUN = SCAN memeriksa kesalahan sintaks JCL tanpa menjalankannya.

  • TYPRUN = HOLD menempatkan pekerjaan pada HOLD dalam antrian pekerjaan. Untuk melepaskan pekerjaan, "A" dapat diketikkan terhadap pekerjaan di SPOOL, yang akan membawa pekerjaan ke eksekusi.

TIME

Menentukan rentang waktu yang akan digunakan oleh prosesor untuk menjalankan pekerjaan. Berikut sintaksnya:

TIME=(mm, ss) or TIME=ss

Dimana mm = menit dan ss = detik

Parameter ini dapat berguna saat menguji program yang baru dikodekan. Untuk memastikan bahwa program tidak berjalan lama karena kesalahan perulangan, parameter waktu dapat dikodekan sehingga program berhenti ketika waktu CPU yang ditentukan tercapai.

REGION

Menentukan ruang alamat yang diperlukan untuk menjalankan langkah pekerjaan dalam pekerjaan. Berikut sintaksnya:

REGION=nK | nM

Di sini, wilayah dapat ditentukan sebagai nK atau nM di mana n adalah angka, K adalah kilobyte dan M adalah Megabyte.

Jika REGION = 0K atau 0M, address space terbesar disediakan untuk eksekusi.Dalam aplikasi kritis, coding 0K atau 0M dilarang untuk menghindari pemborosan ruang alamat.

Contoh

//URMISAMP JOB (*),"tutpoint",CLASS=6,PRTY=10,NOTIFY=&SYSUID, 
//   MSGCLASS=X,MSGLEVEL=(1,1),TYPRUN=SCAN, 
//   TIME=(3,0),REGION=10K

Di sini, pernyataan JOB semakin melampaui posisi ke-70 dalam satu baris, jadi kami melanjutkan ke baris berikutnya yang harus dimulai dengan "//" diikuti dengan satu atau lebih spasi.

Parameter Miscellaneous

Ada beberapa parameter lain, yang dapat digunakan dengan Pernyataan JOB tetapi tidak sering digunakan:

ADDRSPC Jenis penyimpanan yang digunakan: Virtual atau Nyata
BYTES Ukuran data yang akan ditulis ke log keluaran dan tindakan yang harus diambil jika ukurannya terlampaui.
LINES Jumlah baris maksimum yang akan dicetak ke log keluaran.
PAGES Jumlah halaman maksimum yang akan dicetak ke log keluaran.
USER ID pengguna digunakan untuk mengirimkan pekerjaan
PASSWORD Kata sandi dari id-pengguna yang ditentukan dalam parameter USER.
COND and RESTART Ini digunakan dalam pemrosesan langkah pekerjaan bersyarat dan dijelaskan secara rinci saat membahas Pemrosesan bersyarat.

Setiap JCL dapat terdiri dari banyak langkah pekerjaan. Setiap langkah pekerjaan dapat menjalankan program secara langsung atau dapat memanggil prosedur, yang pada gilirannya menjalankan satu atau lebih program (langkah-langkah pekerjaan). Pernyataan, yang menyimpan informasi program / prosedur langkah kerja adalahEXEC statement.

Tujuan dari pernyataan EXEC adalah untuk memberikan informasi yang diperlukan untuk program / prosedur yang dijalankan pada langkah pekerjaan. Parameter yang dikodekan dalam pernyataan ini dapat mengirimkan data ke program yang sedang dieksekusi, dapat menimpa parameter tertentu dari pernyataan JOB dan dapat mengirimkan parameter ke prosedur jika pernyataan EXEC memanggil prosedur alih-alih langsung menjalankan program.

Sintaksis

Berikut adalah sintaks dasar dari pernyataan JCL EXEC:

//Step-name EXEC Positional-param, Keyword-param

Deskripsi

Mari kita lihat deskripsi istilah yang digunakan dalam sintaks pernyataan EXEC di atas.

NAMA LANGKAH

Ini mengidentifikasi langkah pekerjaan dalam JCL. Panjangnya bisa 1 sampai 8 dengan karakter alfanumerik.

LAKUKAN

Ini adalah kata kunci untuk mengidentifikasinya sebagai pernyataan EXEC.

POSISI-PARAM

Ini adalah parameter posisi, yang terdiri dari dua jenis:

Parameter Posisi Deskripsi
PGM Ini mengacu pada nama program yang akan dijalankan pada langkah pekerjaan.
PROC Ini mengacu pada nama prosedur yang akan dijalankan pada langkah pekerjaan. Kami akan membahasnya dalam bab terpisah.

KEYWORD-PARAM

Berikut adalah berbagai parameter kata kunci untuk pernyataan EXEC. Anda dapat menggunakan satu atau lebih parameter berdasarkan persyaratan dan dipisahkan dengan koma:

Parameter Kata Kunci Deskripsi
PARM

Digunakan untuk memberikan data parametrized ke program yang sedang dieksekusi pada langkah pekerjaan. Ini adalah bidang bergantung program dan tidak memiliki aturan pasti, kecuali bahwa nilai PARM harus disertakan dalam kutipan jika memiliki karakter khusus.

Sebagai contoh diberikan di bawah ini, nilai "CUST1000" dikirimkan sebagai nilai alfanumerik ke program. Jika program di COBOL, nilai yang melewati parameter PARM di JCL diterima di LINKAGE SECTION dari program.

ADDRSPC

Ini digunakan untuk menentukan apakah langkah pekerjaan memerlukan penyimpanan virtual atau nyata untuk eksekusi. Penyimpanan virtual dapat di-halaman sedangkan penyimpanan sebenarnya tidak dan ditempatkan di memori utama untuk eksekusi. Langkah-langkah pekerjaan, yang membutuhkan eksekusi lebih cepat dapat ditempatkan di penyimpanan nyata. Berikut sintaksnya:

ADDRSPC=VIRT | REAL

Ketika ADDRSPC tidak dikodekan, VIRT adalah yang default.

ACCT

Ini menentukan informasi akuntansi dari langkah pekerjaan. Berikut sintaksnya:

ACCT=(userid)

Ini mirip dengan parameter posisi accounting informationdalam pernyataan JOB. Jika dikodekan baik dalam pernyataan JOB dan EXEC, maka informasi akuntansi dalam pernyataan JOB berlaku untuk semua langkah pekerjaan di mana parameter ACCT tidak dikodekan. Parameter ACCT dalam pernyataan EXEC akan menimpa yang ada dalam pernyataan JOB hanya untuk langkah pekerjaan itu.

Parameter Kata Kunci Umum dari Pernyataan EXEC dan JOB

Parameter Kata Kunci Deskripsi
ADDRSPC Kode ADDRSPC dalam pernyataan JOB menimpa kode ADDRSPC dalam pernyataan EXEC dari setiap langkah pekerjaan.
TIME Jika TIME dikodekan dalam pernyataan EXEC, maka itu berlaku untuk langkah pekerjaan itu saja. Jika ditentukan dalam pernyataan JOB dan EXEC, keduanya akan berlaku dan dapat menyebabkan kesalahan batas waktu karena salah satunya. Tidak disarankan untuk menggunakan parameter TIME dalam pernyataan JOB dan EXEC secara bersamaan.
REGION

Jika REGION dikodekan dalam pernyataan EXEC, maka itu berlaku untuk langkah pekerjaan itu saja.

REGION yang dikodekan dalam pernyataan JOB menggantikan REGION yang dikodekan dalam pernyataan EXEC dari setiap langkah pekerjaan.

COND

Digunakan untuk mengontrol eksekusi langkah pekerjaan berdasarkan kode-kembali dari langkah sebelumnya.

Jika parameter COND dikodekan dalam pernyataan EXEC dari langkah pekerjaan, maka parameter COND dari pernyataan JOB (jika ada) diabaikan. Berbagai pengujian yang dapat dilakukan menggunakan parameter COND dijelaskan dalam Pemrosesan bersyarat.

Contoh

Berikut adalah contoh sederhana dari skrip JCL bersama dengan pernyataan JOB dan EXEC:

//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,
//      NOTIFY=&SYSUID
//*
//STEP010 EXEC PGM=MYCOBOL,PARAM=CUST1000,
//      ACCT=(XXXX),REGION=8K,ADDRSPC=REAL,TIME=1440

Set data adalah file mainframe dengan catatan yang diatur dalam format tertentu. Set data disimpan di Direct Access Storage Device (DASD) atau Tapes dari mainframe dan merupakan area penyimpanan data dasar. Jika data ini diperlukan untuk digunakan / dibuat dalam program batch, maka nama fisik file (yaitu, dataset) bersama dengan format file dan organisasi dikodekan dalam JCL.

Definisi dari setiap kumpulan data yang digunakan di JCL diberikan menggunakan DD statement. Sumber daya input dan output yang diperlukan oleh langkah pekerjaan perlu dijelaskan dalam pernyataan DD dengan informasi seperti organisasi set data, persyaratan penyimpanan, dan panjang rekaman.

Sintaksis

Berikut ini adalah sintaks dasar dari pernyataan DD JCL:

//DD-name DD Parameters

Deskripsi

Mari kita lihat deskripsi istilah yang digunakan dalam sintaks pernyataan DD di atas.

DD-NAME

DD-NAME mengidentifikasi kumpulan data atau sumber daya masukan / keluaran. Jika ini adalah file input / output yang digunakan oleh program COBOL / Assembler, maka file tersebut direferensikan dengan nama ini di dalam program.

DD

Ini adalah kata kunci untuk mengidentifikasinya sebagai pernyataan DD.

PARAMETER

Berikut adalah berbagai parameter untuk pernyataan DD. Anda dapat menggunakan satu atau lebih parameter berdasarkan persyaratan dan dipisahkan dengan koma:

Parameter Deskripsi
DSN

Parameter DSN mengacu pada nama dataset fisik dari dataset yang baru dibuat atau yang sudah ada. Nilai DSN dapat terdiri dari sub-nama yang masing-masing terdiri dari 1 hingga 8 karakter, dipisahkan oleh titik dan total panjang 44 karakter (alfanumerik). Berikut sintaksnya:

DSN=Physical Dataset Name

Temporary datasetsperlu penyimpanan hanya selama durasi pekerjaan dan dihapus saat pekerjaan selesai. Kumpulan data tersebut direpresentasikan sebagaiDSN=&name atau hanya tanpa DSN yang ditentukan.

Jika kumpulan data sementara yang dibuat oleh langkah pekerjaan akan digunakan di langkah pekerjaan berikutnya, maka itu direferensikan sebagai DSN=*.stepname.ddname. Ini disebut Backward Referencing.

DISP

Parameter DISP digunakan untuk mendeskripsikan status dataset, disposisi pada akhir langkah pekerjaan pada penyelesaian normal dan abnormal. DISP tidak diperlukan dalam pernyataan DD hanya jika kumpulan data dibuat dan dihapus dalam langkah pekerjaan yang sama (seperti kumpulan data sementara). Berikut sintaksnya:

DISP=(status, normal-disposition, abnormal-disposition)

Berikut ini adalah nilai yang valid untuk status:

  • NEW: Dataset baru dibuat oleh langkah pekerjaan. OUTPUT1 pada contoh di atas.

  • OLD: Dataset sudah dibuat dan akan ditimpa pada langkah pekerjaan. Langkah pekerjaan mendapatkan akses eksklusif pada kumpulan data dan tidak ada pekerjaan lain yang dapat mengakses kumpulan data ini hingga langkah pekerjaan selesai.

  • SHR: Dataset sudah dibuat dan akan dibaca di langkah pekerjaan. Dataset dapat dibaca oleh banyak pekerjaan pada saat yang bersamaan. Contoh: INPUT1 dan INPUT2.

  • MOD: Dataset sudah dibuat. Disposisi ini akan digunakan ketika ada kebutuhan untuk menambahkan catatan baru ke set data yang ada (catatan yang ada tidak akan ditimpa).

SEBUAH normal-disposition parameter dapat mengambil salah satu nilai berikut

  • CATLG, UNCATLG, DELETE, PASS dan KEEP

SEBUAH abnormal-disposition parameter dapat mengambil salah satu nilai berikut

  • CATLG, UNCATLG, DELETE dan KEEP

Berikut adalah deskripsi parameter CATLG, UNCATLG, DELETE, PASS dan KEEP:

  • CATLG : Dataset dipertahankan dengan entri di katalog sistem.

  • UNCATLG : Dataset dipertahankan tetapi entri katalog sistem dihapus.

  • KEEP: Dataset dipertahankan tanpa mengubah entri katalog apa pun. KEEP adalah satu-satunya disposisi yang valid untuk file VSAM. Ini hanya akan digunakan untuk kumpulan data permanen.

  • DELETE : Set data dihapus dari katalog pengguna dan sistem.

  • PASS: Ini hanya berlaku untuk disposisi normal. Ini digunakan ketika kumpulan data akan diteruskan dan diproses oleh langkah pekerjaan berikutnya di JCL

Ketika salah satu sub-parameter DISP tidak ditentukan, nilai defaultnya adalah sebagai berikut:

  • status : BARU adalah nilai default.

  • normal-disposition : Jika statusnya BARU, disposisi normal default adalah HAPUS, jika tidak maka TETAP.

  • abnormal-disposition : Sama seperti disposisi normal.

DCB

Parameter Data Control Block (DCB) merinci karakteristik fisik dari sebuah dataset. Parameter ini diperlukan untuk set data yang baru dibuat di langkah pekerjaan.

LRECL adalah panjang setiap record yang disimpan dalam dataset.

RECFM adalah format record dari dataset. RECFM dapat menampung nilai FB, V atau VB. FB adalah organisasi blok tetap di mana satu atau lebih catatan logis dikelompokkan dalam satu blok. V adalah organisasi variabel di mana satu catatan logis dengan panjang variabel ditempatkan dalam satu blok fisik. VB adalah organisasi Blok Variabel di mana satu atau lebih catatan logis dengan panjang variabel ditempatkan dalam satu blok fisik.

BLKSIZE adalah ukuran blok fisik. Semakin besar bloknya, semakin besar jumlah record untuk file FB atau VB.

DSORG adalah jenis organisasi set data. DSORG dapat menyimpan nilai PS (Physical Sequential), PO (Partitioned Organization) dan DA (Direct Organization).

Jika ada kebutuhan untuk mereplikasi nilai DCB dari satu set data ke set data lain dalam jobstep yang sama atau JCL, maka itu ditetapkan sebagai DCB = *. Stepname.ddname di mana nama langkah adalah nama langkah pekerjaan dan ddname adalah set data dari mana DCB disalin.

Periksa contoh di bawah ini di mana RECFM = FB, LRECL = 80 membentuk DCB dari dataset OUTPUT1.

SPACE

Parameter SPACE menentukan ruang yang diperlukan untuk dataset di DASD (Direct Access Storage Disk). Berikut sintaksnya:

SPACE=(spcunits, (pri, sec, dir), RLSE)

Berikut adalah deskripsi dari semua parameter yang digunakan:

  • spcunits : Ini bisa menjadi salah satu CYL (Cylinder), TRK (Tracks) atau BLKSIZE (Block Size).

  • pri : Ini adalah ruang utama yang diperlukan untuk kumpulan data.

  • sec : Ini adalah ruang tambahan yang diperlukan, jika ruang utama tidak mencukupi.

  • ir : Ini adalah blok direktori yang diperlukan, jika datasetnya adalah PDS (Partitioned Dataset) dengan anggota di dalamnya.

  • RLSE : Ini digunakan untuk melepaskan ruang yang tidak digunakan saat pekerjaan selesai.

UNIT

Parameter UNIT dan VOL terdaftar dalam katalog sistem untuk kumpulan data yang dikatalogkan dan karenanya dapat diakses hanya dengan nama DSN fisik. Tetapi untuk set data yang tidak dikatalogkan, pernyataan DD harus menyertakan parameter ini. Untuk kumpulan data baru yang akan dibuat, parameter UNIT / VOL dapat ditentukan atau Z / OS mengalokasikan perangkat dan volume yang sesuai.

Parameter UNIT menentukan jenis perangkat tempat dataset disimpan. Jenis perangkat dapat diidentifikasi menggunakan Alamat Perangkat Keras atau grup Jenis perangkat. Berikut sintaksnya:

UNIT=DASD | SYSDA

Dimana DASD adalah singkatan dari Direct Access Storage Device dan SYSDA adalah singkatan dari System Direct Access dan mengacu pada perangkat penyimpanan disk yang tersedia berikutnya.

VOL

Parameter VOL menentukan nomor volume pada perangkat yang diidentifikasi oleh parameter UNIT. Berikut sintaksnya:

VOL=SER=(v1,v2)

Di mana v1, v2 adalah nomor seri volume. Anda juga dapat menggunakan sintaks berikut:

VOL=REF=*.DDNAME

Di mana REF adalah referensi mundur ke nomor seri volume set data di salah satu langkah pekerjaan sebelumnya di JCL.

SYSOUT

Parameter pernyataan DD yang dibahas sejauh ini sesuai dengan data yang disimpan dalam kumpulan data. Parameter SYSOUT mengarahkan data ke perangkat keluaran berdasarkan kelas yang ditentukan. Berikut adalah sintaksnya

SYSOUT=class

Dimana jika kelasnya A maka itu mengarahkan output ke printer, dan jika kelasnya adalah * kemudian mengarahkan output ke tujuan yang sama seperti parameter MSGCLASS dalam pernyataan JOB.

Contoh

Berikut adalah contoh, yang menggunakan pernyataan DD bersama dengan berbagai parameter yang dijelaskan di atas:

//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,
//         NOTIFY=&SYSUID
//*
//STEP010  EXEC PGM=ICETOOL,ADDRSPC=REAL
//*
//INPUT1   DD DSN=TUTO.SORT.INPUT1,DISP=SHR
//INPUT2   DD DSN=TUTO.SORT.INPUT2,DISP=SHR,UNIT=SYSDA,
//         VOL=SER=(1243,1244)
//OUTPUT1  DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
//         RECFM=FB,LRECL=80,SPACE=(CYL,(10,20))
//OUTPUT2  DD SYSOUT=*

Base Libraryadalah Partitioned Dataset (PDS), yang menampung modul beban program untuk dieksekusi di JCL atau prosedur katalog, yang disebut dalam program. Pustaka dasar dapat ditentukan untuk seluruh JCL di aJOBLIB perpustakaan atau untuk langkah pekerjaan tertentu di a STEPLIB pernyataan.

Pernyataan JOBLIB

SEBUAH JOBLIBpernyataan digunakan untuk mengidentifikasi lokasi program yang akan dijalankan di JCL. Pernyataan JOBLIB ditentukan setelah pernyataan JOB dan sebelum pernyataan EXEC. Ini hanya dapat digunakan untuk prosedur dan program dalam aliran.

Sintaksis

Berikut adalah sintaks dasar dari pernyataan JCL JOBLIB:

//JOBLIB DD DSN=dsnname,DISP=SHR

Pernyataan JOBLIB berlaku untuk semua pernyataan EXEC dalam JCL. Program yang ditentukan dalam pernyataan EXEC akan dicari di perpustakaan JOBLIB diikuti oleh perpustakaan sistem.

Misalnya, jika pernyataan EXEC menjalankan program COBOL, modul beban program COBOL harus ditempatkan di dalam perpustakaan JOBLIB.

Pernyataan STEPLIB

SEBUAH STEPLIBpernyataan digunakan untuk mengidentifikasi lokasi program yang akan dijalankan dalam Langkah Pekerjaan. Pernyataan STEPLIB ditentukan setelah pernyataan EXEC dan sebelum pernyataan DD dari langkah pekerjaan.

Sintaksis

Berikut ini adalah sintaks dasar dari pernyataan JCL STEPLIB:

//STEPLIB DD DSN=dsnname,DISP=SHR

Program yang ditentukan dalam pernyataan EXEC akan dicari di perpustakaan STEPLIB diikuti oleh perpustakaan sistem. Kode STEPLIB dalam langkah pekerjaan menggantikan pernyataan JOBLIB.

Contoh

Contoh berikut menunjukkan penggunaan pernyataan JOBLIB dan STEPLIB:

//MYJCL JOB ,,CLASS=6,NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=MYPROC.BASE.LIB1,DISP=SHR
//*
//STEP1 EXEC PGM=MYPROG1
//INPUT1 DD DSN=MYFILE.SAMPLE.INPUT1,DISP=SHR
//OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
//           RECFM=FB,LRECL=80
//*
//STEP2 EXEC PGM=MYPROG2
//STEPLIB DD DSN=MYPROC.BASE.LIB2,DISP=SHR
//INPUT2 DD DSN=MYFILE.SAMPLE.INPUT2,DISP=SHR
//OUTPUT2 DD DSN=MYFILES.SAMPLE.OUTPUT2,DISP=(,CATLG,DELETE),
//           RECFM=FB,LRECL=80

Di sini, modul beban program MYPROG1 (di LANGKAH1) dicari di MYPROC.SAMPLE.LIB1. Jika tidak ditemukan, itu akan dicari di perpustakaan sistem. Di LANGKAH2, STEPLIB menggantikan JOBLIB dan memuat modul program MYPROG2 dicari di MYPROC.SAMPLE.LIB2 dan kemudian di perpustakaan sistem.

Pernyataan INCLUDE

Satu set pernyataan JCL yang dikodekan dalam anggota PDS dapat dimasukkan ke JCL menggunakan file INCLUDEpernyataan. Ketika JES menafsirkan JCL, kumpulan pernyataan JCL dalam anggota TERMASUK menggantikan pernyataan TERMASUK.

Sintaksis

Berikut ini adalah sintaks dasar dari pernyataan JCL INCLUDE:

//name INCLUDE MEMBER=member-name

Tujuan utama pernyataan INCLUDE adalah dapat digunakan kembali. Misalnya, file umum yang akan digunakan di banyak JCL dapat dikodekan sebagai pernyataan DD dalam anggota TERMASUK dan digunakan dalam JCL.

Pernyataan Dummy DD, spesifikasi kartu data, PROC, JOB, pernyataan PROC tidak dapat dikodekan dalam anggota TERMASUK. Pernyataan INLCUDE dapat dikodekan dalam anggota INCLUDE dan penumpukan selanjutnya dapat dilakukan hingga 15 level.

Pernyataan JCLLIB

SEBUAH JCLLIBpernyataan digunakan untuk mengidentifikasi perpustakaan pribadi yang digunakan dalam pekerjaan. Ini dapat digunakan baik dengan prosedur instream dan katalog.

Sintaksis

Berikut ini adalah sintaks dasar dari pernyataan JCL JCLLIB:

//name JCLLIB ORDER=(library1, library2....)

Perpustakaan yang ditentukan dalam pernyataan JCLLIB akan dicari dalam urutan tertentu untuk menemukan program, prosedur, dan anggota TERMASUK yang digunakan dalam pekerjaan. Hanya ada satu pernyataan JCLLIB di JCL; ditentukan setelah pernyataan JOB dan sebelum pernyataan EXEC dan INCLUDE tetapi tidak dapat dikodekan dalam anggota INCLUDE.

Contoh

Dalam contoh berikut, program MYPROG3 dan INCLUDE anggota MYINCL dicari dalam urutan MYPROC.BASE.LIB1, MYPROC.BASE.LIB2, pustaka sistem.

//MYJCL JOB ,,CLASS=6,NOTIFY=&SYSUID
//*
//MYLIB JCLLIB ORDER=(MYPROC.BASE.LIB1,MYPROC.BASE.LIB2)
//*
//STEP1 EXEC PGM=MYPROG3
//INC INCLUDE MEMBER=MYINCL
//OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
//           RECFM=FB,LRECL=80
//*

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.

Sistem Entri Pekerjaan menggunakan dua pendekatan untuk melakukan pemrosesan bersyarat di JCL. Saat pekerjaan selesai, kode yang dikembalikan ditetapkan berdasarkan status eksekusi. Kode yang dikembalikan dapat berupa angka antara 0 (eksekusi berhasil) hingga 4095 (bukan nol menunjukkan kondisi kesalahan). Nilai konvensional yang paling umum adalah:

  • 0 = Normal - semua OK

  • 4 = Peringatan - kesalahan kecil atau masalah.

  • 8 = Error - kesalahan atau masalah yang signifikan.

  • 12 = Kesalahan parah - kesalahan besar atau masalah, hasil tidak dapat dipercaya.

  • 16 = Kesalahan terminal - masalah yang sangat serius, jangan gunakan hasilnya.

Eksekusi langkah pekerjaan dapat dikontrol berdasarkan kode kembalian dari langkah sebelumnya menggunakan COND parameter dan IF-THEN-ELSE konstruksi, yang telah dijelaskan dalam tutorial ini.

Parameter COND

SEBUAH CONDparameter dapat dikodekan dalam pernyataan JOB atau EXEC JCL. Ini adalah tes pada kode pengembalian dari langkah-langkah pekerjaan sebelumnya. Jika pengujian dievaluasi sebagai true, eksekusi langkah tugas saat ini akan dilewati. Bypassing hanyalah kelalaian langkah pekerjaan dan bukan penghentian abnormal. Ada paling banyak delapan kondisi yang digabungkan dalam satu pengujian.

Sintaksis

Berikut ini adalah sintaks dasar dari Parameter COND JCL:

COND=(rc,logical-operator)
or
COND=(rc,logical-operator,stepname)
or
COND=EVEN
or 
COND=ONLY

Berikut adalah deskripsi parameter yang digunakan:

  • rc : Ini adalah kode pengembalian

  • logical-operator : Ini bisa berupa GT (Greater Than), GE (Greater than atau Equal to), EQ (Equal to), LT (Lesser Than), LE (Lesser than atau Equal to) atau NE (Not Equal to).

  • stepname : Ini adalah langkah pekerjaan yang kode kembaliannya digunakan dalam pengujian.

Dua kondisi terakhir (a) COND = EVEN dan (b) COND = ONLY, telah dijelaskan di bawah dalam tutorial ini.

COND dapat dikodekan baik di dalam pernyataan JOB atau pernyataan EXEC, dan dalam kedua kasus, ini berperilaku berbeda seperti yang dijelaskan di bawah ini:

COND di dalam pernyataan JOB

Ketika COND dikodekan dalam pernyataan JOB, kondisi tersebut diuji untuk setiap langkah pekerjaan. Jika kondisi benar pada setiap langkah pekerjaan tertentu, itu dilewati bersama dengan langkah pekerjaan yang mengikutinya. Berikut ini contohnya:

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID,COND=(5,LE)
//*
//STEP10 EXEC PGM=FIRSTP  
//* STEP10 executes without any test being performed.

//STEP20 EXEC PGM=SECONDP 
//* STEP20 is bypassed, if RC of STEP10 is 5 or above. //* Say STEP10 ends with RC4 and hence test is false. //* So STEP20 executes and lets say it ends with RC16.

//STEP30 EXEC PGM=SORT
//* STEP30 is bypassed since 5 <= 16.

COND di dalam pernyataan EXEC

Ketika COND dikodekan dalam pernyataan EXEC dari sebuah langkah pekerjaan dan terbukti benar, hanya langkah pekerjaan itu yang dilewati, dan eksekusi dilanjutkan dari langkah pekerjaan berikutnya.

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* Assuming STP01 ends with RC0.

//STP02 EXEC PGM=MYCOBB,COND=(0,EQ,STP01)
//* In STP02, condition evaluates to TRUE and step bypassed.

//STP03 EXEC PGM=IEBGENER,COND=((10,LT,STP01),(10,GT,STP02))
//* In STP03, first condition fails and hence STP03 executes. //* Since STP02 is bypassed, the condition (10,GT,STP02) in //* STP03 is not tested.

COND = BAHKAN

Ketika COND = EVEN dikodekan, langkah pekerjaan saat ini dijalankan, bahkan jika langkah sebelumnya berhenti secara tidak normal. Jika ada kondisi RC lain yang dikodekan bersama dengan COND = EVEN, maka langkah pekerjaan akan dijalankan jika tidak ada kondisi RC yang benar.

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* Assuming STP01 ends with RC0.

//STP02 EXEC PGM=MYCOBB,COND=(0,EQ,STP01)
//* In STP02, condition evaluates to TRUE and step bypassed.

//STP03 EXEC PGM=IEBGENER,COND=((10,LT,STP01),EVEN)
//* In STP03, condition (10,LT,STP01) evaluates to true, //* hence the step is bypassed.

COND = HANYA

Ketika COND = ONLY dikodekan, langkah pekerjaan saat ini dijalankan, hanya jika salah satu langkah sebelumnya berhenti secara tidak normal. Jika kondisi RC lainnya dikodekan bersama dengan COND = ONLY, maka langkah pekerjaan dijalankan jika tidak ada kondisi RC yang benar dan salah satu langkah pekerjaan sebelumnya gagal secara tidak normal.

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* Assuming STP01 ends with RC0.

//STP02 EXEC PGM=MYCOBB,COND=(4,EQ,STP01)
//* In STP02, condition evaluates to FALSE, step is executed //* and assume the step abends.

//STP03 EXEC PGM=IEBGENER,COND=((0,EQ,STP01),ONLY)
//* In STP03, though the STP02 abends, the condition //* (0,EQ,STP01) is met. Hence STP03 is bypassed.

Konstruksi IF-THEN-ELSE

Pendekatan lain untuk mengontrol pemrosesan pekerjaan adalah dengan menggunakan konstruksi IF-THEN-ELSE. Ini memberikan lebih banyak fleksibilitas dan cara pemrosesan bersyarat yang ramah pengguna.

Sintaksis

Berikut ini adalah sintaks dasar dari JCL IF-THEN-ELSE Construct:

//name IF condition THEN
list of statements //* action to be taken when condition is true
//name ELSE 
list of statements //* action to be taken when condition is false
//name ENDIF

Berikut ini adalah deskripsi dari istilah yang digunakan dalam Konstruksi IF-THEN-ELSE di atas:

  • name : Ini opsional dan sebuah nama dapat memiliki 1 hingga 8 karakter alfanumerik yang dimulai dengan alfabet, #, $ atau @.

  • Condition : Kondisi akan memiliki format: KEYWORD OPERATOR VALUE, dimana KEYWORDSdapat berupa RC (Kode Pengembalian), ABENDCC (Sistem atau kode penyelesaian pengguna), ABEND, RUN (langkah mulai eksekusi). SebuahOPERATOR dapat menjadi operator logika (AND (&), OR (|)) atau operator relasional (<, <=,>,> =, <>).

Contoh

Berikut adalah contoh sederhana yang menunjukkan penggunaan IF-THEN-ELSE:

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//PRC1   PROC
//PST1	   EXEC PGM=SORT
//PST2	   EXEC PGM=IEBGENER
//       PEND
//STP01  EXEC PGM=SORT 
//IF1    IF STP01.RC = 0 THEN
//STP02     EXEC PGM=MYCOBB1,PARM=123
//       ENDIF
//IF2    IF STP01.RUN THEN
//STP03a    EXEC PGM=IEBGENER
//STP03b    EXEC PGM=SORT
//       ENDIF
//IF3    IF STP03b.!ABEND THEN
//STP04     EXEC PGM=MYCOBB1,PARM=456
//       ELSE
//       ENDIF
//IF4    IF (STP01.RC = 0 & STP02.RC <= 4) THEN
//STP05     EXEC PROC=PRC1
//       ENDIF
//IF5    IF STP05.PRC1.PST1.ABEND THEN
//STP06     EXEC PGM=MYABD
//       ELSE
//STP07     EXEC PGM=SORT
//       ENDIF

Mari kita coba melihat program di atas untuk memahaminya secara lebih rinci:

  • Kode kembali STP01 diuji dalam IF1. Jika nilainya 0, maka STP02 dijalankan. Jika tidak, pemrosesan pergi ke pernyataan IF berikutnya (IF2).

  • Di IF2, Jika STP01 sudah mulai dijalankan, maka STP03a dan STP03b akan dijalankan.

  • Di IF3, Jika STP03b tidak ABEND, maka STP04 dijalankan. Di ELSE, tidak ada pernyataan. Ini disebut pernyataan NULL ELSE.

  • Dalam IF4, jika STP01.RC = 0 dan STP02.RC <= 4 BENAR, maka STP05 dijalankan.

  • Di IF5, jika proc-step PST1 di PROC PRC1 di jobstep STP05 ABEND, maka STP06 akan dijalankan. Lain STP07 dijalankan.

  • Jika IF4 bernilai false, maka STP05 tidak dijalankan. Dalam hal ini, IF5 tidak diuji dan langkah-langkah STP06, STP07 tidak dijalankan.

IF-THEN-ELSE tidak akan dijalankan dalam kasus penghentian pekerjaan yang tidak normal seperti pengguna membatalkan pekerjaan, waktu kerja berakhir atau kumpulan data direferensikan ke belakang ke langkah yang dilewati.

Mengatur Pos Pemeriksaan

Anda dapat mengatur set data pos pemeriksaan di dalam program JCL Anda menggunakan SYSCKEOV, yang merupakan pernyataan DD.

SEBUAH CHKPTadalah parameter yang dikodekan untuk set data QSAM multi-volume dalam pernyataan DD. Ketika CHKPT dikodekan sebagai CHKPT = EOV, sebuah checkpoint ditulis ke dataset yang ditentukan dalam pernyataan SYSCKEOV di akhir setiap volume dari dataset multi-volume input / output.

//CHKSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01     EXEC PGM=MYCOBB
//SYSCKEOV  DD DSNAME=SAMPLE.CHK,DISP=MOD
//IN1       DD DSN=SAMPLE.IN,DISP=SHR
//OUT1      DD DSN=SAMPLE.OUT,DISP=(,CATLG,CATLG)
//          CHKPT=EOV,LRECL=80,RECFM=FB

Pada contoh di atas, checkpoint ditulis dalam kumpulan data SAMPLE.CHK di akhir setiap volume kumpulan data keluaran SAMPLE.OUT.

Mulai Ulang Pemrosesan

Anda dapat memulai kembali pemrosesan eter menggunakan cara otomatis menggunakan RD parameter atau manual menggunakan RESTART parameter.

RD parameter dikodekan dalam pernyataan JOB atau EXEC dan ini membantu dalam memulai ulang JOB / LANGKAH otomatis dan dapat menampung salah satu dari empat nilai: R, RNC, NR atau NC.

  • RD=R memungkinkan restart otomatis dan mempertimbangkan checkpoint yang dikodekan dalam parameter CHKPT dari pernyataan DD.

  • RD=RNC memungkinkan restart otomatis, tetapi menimpa (mengabaikan) parameter CHKPT.

  • RD=NRmenetapkan bahwa pekerjaan / langkah tidak dapat dimulai ulang secara otomatis. Tetapi ketika di-restart secara manual menggunakan parameter RESTART, parameter CHKPT (jika ada) akan dipertimbangkan.

  • RD=NC melarang restart otomatis dan pemrosesan pos pemeriksaan.

Jika ada persyaratan untuk melakukan restart otomatis hanya untuk kode abend tertentu, maka itu dapat ditentukan di SCHEDxx anggota perpustakaan parmlib sistem IBM.

RESTART parameterdikodekan dalam pernyataan JOB atau EXEC dan ini membantu dalam restart manual JOB / STEP setelah kegagalan pekerjaan. RESTART dapat disertai dengan checkid, yaitu checkpoint yang tertulis di dataset yang dikodekan dalam pernyataan SYSCKEOV DD. Ketika sebuah checkid dikodekan, pernyataan SYSCHK DD harus dikodekan untuk mereferensikan dataset checkpoint setelah pernyataan JOBLIB (jika ada), selain itu setelah pernyataan JOB.

//CHKSAMP JOB CLASS=6,NOTIFY=&SYSUID,RESTART=(STP01,chk5)
//*
//SYSCHK    DD DSN=SAMPLE.CHK,DISP=OLD
//STP01     EXEC PGM=MYCOBB
//*SYSCKEOV	DD DSNAME=SAMPLE.CHK,DISP=MOD
//IN1       DD DSN=SAMPLE.IN,DISP=SHR
//OUT1      DD DSN=SAMPLE.OUT,DISP=(,CATLG,CATLG)
//          CHKPT=EOV,LRECL=80,RECFM=FB

Dalam contoh di atas, chk5 adalah checkid, yaitu STP01 di-restart di checkpoint5. Harap dicatat bahwa pernyataan SYSCHK ditambahkan dan pernyataan SYSCKEOV dikomentari di program sebelumnya yang dijelaskan di bagian Setting Checkpoint.

Nama kumpulan data menentukan nama file dan dilambangkan dengan DSN di JCL. Parameter DSN mengacu pada nama dataset fisik dari dataset yang baru dibuat atau yang sudah ada. Nilai DSN dapat terdiri dari sub-nama yang masing-masing terdiri dari 1 hingga 8 karakter, dipisahkan oleh titik dan total panjang 44 karakter (alfanumerik). Berikut sintaksnya:

DSN=&name | *.stepname.ddname

Temporary datasetsperlu penyimpanan hanya selama durasi pekerjaan dan dihapus saat pekerjaan selesai. Kumpulan data tersebut direpresentasikan sebagaiDSN=&name atau hanya tanpa DSN yang ditentukan.

Jika kumpulan data sementara yang dibuat oleh langkah pekerjaan akan digunakan di langkah pekerjaan berikutnya, maka itu direferensikan sebagai DSN=*.stepname.ddname. Ini disebutBackward Referencing.

Kumpulan Data Gabungan

Jika ada lebih dari satu dataset dengan format yang sama, mereka dapat digabungkan dan diteruskan sebagai input ke program dalam satu nama DD.

//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//*
//STEP10    EXEC PGM=SORT
//SORTIN    DD DSN=SAMPLE.INPUT1,DISP=SHR
//          DD DSN=SAMPLE.INPUT2,DISP=SHR
//          DD DSN=SAMPLE.INPUT3,DISP=SHR
//SORTOUT   DD DSN=SAMPLE.OUTPUT,DISP=(,CATLG,DELETE),
//          LRECL=50,RECFM=FB

Dalam contoh di atas, tiga dataset digabungkan dan diteruskan sebagai input ke program SORT dalam nama SORTIN DD. File tersebut digabungkan, diurutkan pada bidang kunci yang ditentukan dan kemudian ditulis ke file output tunggal SAMPLE.OUTPUT dalam nama SORTOUT DD.

Mengganti Set Data

Dalam JCL standar, program yang akan dijalankan dan kumpulan data terkait ditempatkan dalam prosedur katalog, yang disebut dalam JCL. Biasanya, untuk tujuan pengujian atau untuk perbaikan insiden, mungkin ada kebutuhan untuk menggunakan kumpulan data yang berbeda selain yang ditentukan dalam prosedur katalog. Dalam hal ini, set data dalam prosedur dapat diganti di JCL.

//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//JSTEP1    EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
//          DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//*
//* The cataloged procedure is as below:
//*
//CATLPROC PROC PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//STEP1     EXEC PGM=&PROG
//STEPLIB   DD DSN=&BASELB,DISP=SHR
//IN1       DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1      DD SYSOUT=*
//SYSOUT    DD SYSOUT=*
//SYSIN     DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2     EXEC PGM=SORT

Pada contoh di atas, dataset IN1 menggunakan file MYDATA.URMI.INPUT di PROC, yang diganti di JCL. Oleh karena itu, file input yang digunakan dalam eksekusi adalah MYDATA.OVER.INPUT. Harap dicatat bahwa kumpulan data disebut sebagai STEP1.IN1. Jika hanya ada satu langkah di JCL / PROC, maka kumpulan data dapat dirujuk hanya dengan nama DD. Demikian pula, jika ada lebih dari satu langkah di JCL, maka kumpulan data harus diganti sebagai JSTEP1.STEP1.IN1.

//SAMPINST  JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP      EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
//          DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//          DD DUMMY
//          DD DUMMY
//*

Dalam contoh di atas, dari tiga kumpulan data yang digabungkan di IN1, yang pertama diganti di JCL dan sisanya disimpan seperti yang ada di PROC.

Mendefinisikan GDG di JCL

Generation Data Groups (GDGs) adalah kumpulan kumpulan data yang terkait satu sama lain dengan nama umum. Nama umum disebut sebagai basis GDG dan setiap kumpulan data yang terkait dengan basis disebut versi GDG.

Misalnya, MYDATA.URMI.SAMPLE.GDG adalah nama dasar GDG. Dataset tersebut diberi nama MYDATA.URMI.SAMPLE.GDG.G0001V00, MYDATA.URMI.SAMPLE.GDG.G0002V00 dan seterusnya. Versi terbaru GDG disebut sebagai MYDATA.URMI.SAMPLE.GDG (0), versi sebelumnya disebut (-1), (-2) dan seterusnya. Versi selanjutnya yang akan dibuat dalam program disebut sebagai MYDATA.URMI.SAMPLE.GDG (+1) di JCL.

Buat / Ubah GDG di JCL

Versi GDG dapat memiliki parameter DCB yang sama atau berbeda. Model awal DCB dapat ditentukan untuk digunakan oleh semua versi, tetapi dapat diganti saat membuat versi baru.

//GDGSTEP1 EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
           DEFINE GDG(NAME(MYDATA.URMI.SAMPLE.GDG)   -
           LIMIT(7)                           -
           NOEMPTY                            -
           SCRATCH)
/*
//GDGSTEP2 EXEC PGM=IEFBR14
//GDGMODLD DD  DSN=MYDATA.URMI.SAMPLE.GDG,
//         DISP=(NEW,CATLG,DELETE),
//         UNIT=SYSDA,
//         SPACE=(CYL,10,20),
//         DCB=(LRECL=50,RECFM=FB)
//

Dalam contoh di atas, utilitas IDCAMS menentukan basis GDG di GDGSTEP1 dengan parameter di bawah ini diteruskan dalam pernyataan SYSIN DD:

  • NAME menentukan nama set data fisik dari basis GDG.

  • LIMIT menentukan jumlah maksimum versi yang dapat dimiliki basis GDG.

  • EMPTY membatalkan pencatatan semua generasi saat LIMIT tercapai.

  • NOEMPTY membuka katalog generasi terbaru.

  • SCRATCH menghapus secara fisik generasi saat tidak dikatalogkan.

  • NOSCRATCH jangan hapus set data, yaitu dapat dirujuk menggunakan parameter UNIT dan VOL.

Dalam GDGSTEP2, utilitas IEFBR14 menentukan parameter model DD yang akan digunakan oleh semua versi.

IDCAMS dapat digunakan untuk mengubah parameter definisi GDG seperti meningkatkan LIMIT, mengubah KOSONG menjadi NOEMPTY, dll., Dan versi terkaitnya menggunakan perintah SYSIN adalah ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY.

Hapus GDG di JCL

Dengan menggunakan utilitas IEFBR14, kita dapat menghapus satu versi GDG.

//GDGSTEP3   EXEC PGM=IEFBR14
//GDGDEL     DD  DSN=MYDATA.URMI.SAMPLE.GDG(0),
//           DISP=(OLD,DELETE,DELETE)

Pada contoh di atas, versi terbaru MYDATA.URMI.SAMPLE.GDG dihapus. Harap dicatat bahwa parameter DISP pada penyelesaian pekerjaan normal dikodekan sebagai HAPUS. Karenanya, set data dihapus saat pekerjaan menyelesaikan eksekusi.

IDCAMS dapat digunakan untuk menghapus GDG dan versi terkaitnya menggunakan perintah SYSIN DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE.

  • FORCEmenghapus versi GDG dan basis GDG. Jika salah satu versi GDG disetel dengan tanggal kedaluwarsa yang belum kedaluwarsa, maka versi tersebut tidak dihapus dan karenanya basis GDG dipertahankan.

  • PURGE menghapus versi GDG dan basis GDG terlepas dari tanggal kedaluwarsa.

Menggunakan GDG di JCL

Dalam contoh berikut, versi terbaru MYDATA.URMI.SAMPLE.GDG digunakan sebagai masukan ke program dan versi baru MYDATA.URMI.SAMPLE.GDG dibuat sebagai keluaran.

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01   EXEC PGM=MYCOBB
//IN1     DD DSN=MYDATA.URMI.SAMPLE.GDG(0),DISP=SHR
//OUT1    DD DSN=MYDATA.URMI.SAMPLE.GDG(+1),DISP=(,CALTG,DELETE)
//        LRECL=100,RECFM=FB

Di sini, jika GDG telah dirujuk dengan nama sebenarnya seperti MYDATA.URMI.SAMPLE.GDG.G0001V00, maka itu mengarah pada perubahan JCL setiap kali sebelum eksekusi. Menggunakan (0) dan (+1) membuatnya secara dinamis menggantikan versi GDG untuk eksekusi.

Setiap program batch yang dijalankan melalui JCL membutuhkan input data, yang diproses dan output dibuat. Ada berbagai metode untuk memasukkan masukan ke program dan menulis keluaran yang diterima dari JCL. Dalam mode batch, tidak ada interaksi pengguna yang diperlukan, tetapi perangkat input dan output dan organisasi yang diperlukan ditentukan dalam JCL dan dikirimkan.

Input Data di JCL

Ada berbagai cara untuk memasukkan data ke program menggunakan JCL dan metode ini telah dijelaskan di bawah ini:

DATA INSTREAM

Data sela ke program dapat ditentukan menggunakan pernyataan SYSIN DD.

//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//* Example 1:
//STEP10 EXEC PGM=MYPROG
//IN1    DD DSN=SAMPLE.INPUT1,DISP=SHR
//OUT1   DD DSN=SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
//       LRECL=50,RECFM=FB
//SYSIN  DD *
//CUST1  1000
//CUST2  1001
/*
//*
//* Example 2:
//STEP20 EXEC PGM=MYPROG
//OUT1   DD DSN=SAMPLE.OUTPUT2,DISP=(,CATLG,DELETE),
//       LRECL=50,RECFM=FB
//SYSIN  DD DSN=SAMPLE.SYSIN.DATA,DISP=SHR
//*

Dalam Contoh 1, input ke MYPROG dilewatkan melalui SYSIN. Data disediakan dalam JCL. Dua catatan data diteruskan ke program. Harap dicatat bahwa / * menandai akhir dari data SYSIN instream.

"CUST1 1000" adalah record1 dan "CUST2 1001" adalah record2. Kondisi akhir data terpenuhi ketika simbol / * ditemukan saat membaca data.

Dalam Contoh 2, data SYSIN disimpan dalam kumpulan data, di mana SAMPLE.SYSIN.DATA adalah file PS, yang dapat menyimpan satu atau lebih catatan data.

Input Data melalui file

Seperti yang disebutkan di sebagian besar contoh di bab sebelumnya, input data ke program dapat disediakan melalui file PS, VSAM atau GDG, dengan nama DSN dan parameter DISP yang relevan bersama dengan pernyataan DD.

Dalam Contoh 1, SAMPLE.INPUT1 adalah file input tempat data diteruskan ke MYPROG. Ini disebut sebagai IN1 dalam program.

Output Data dalam JCL

Output dalam JCL dapat dikatalogkan ke dalam dataset atau diteruskan ke SYSOUT. Seperti yang disebutkan dalam bab pernyataan DD,SYSOUT=* mengarahkan output ke kelas yang sama seperti yang disebutkan dalam parameter MSGCLASS dari pernyataan JOB.

Menyimpan Log Pekerjaan

Menentukan MSGCLASS=Ymenyimpan log pekerjaan di JMR (Joblog Management and Retrieval). Seluruh log PEKERJAAN dapat dialihkan ke SPOOL dan dapat disimpan ke kumpulan data dengan memberikan perintah XDC terhadap nama pekerjaan di SPOOL. Ketika perintah XDC diberikan di SPOOL, layar pembuatan dataset terbuka. Log pekerjaan kemudian dapat disimpan dengan memberikan definisi PS atau PDS yang sesuai.

Log pekerjaan juga dapat disimpan ke dalam kumpulan data dengan menyebutkan kumpulan data yang sudah dibuat untuk SYSOUT dan SYSPRINT. Tetapi seluruh log pekerjaan tidak dapat ditangkap melalui cara ini (yaitu, JESMSG tidak akan dikatalogkan) seperti yang dilakukan di JMR atau XDC.

//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP1    EXEC PGM=MYPROG
//IN1      DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1     DD SYSOUT=*
//SYSOUT   DD DSN=MYDATA.URMI.SYSOUT,DISP=SHR
//SYSPRINT DD DSN=MYDATA.URMI.SYSPRINT,DISP=SHR
//SYSIN    DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2    EXEC PGM=SORT

Dalam contoh di atas, SYSOUT dikatalogkan di MYDATA.URMI.SYSOUT dan SYSPRINT di MYDATA.URMI.SYSPRINT.

Mengompilasi Program COBOL

Untuk menjalankan program COBOL dalam mode batch menggunakan JCL, program perlu dikompilasi dan modul beban dibuat dengan semua sub-program. JCL menggunakan modul beban dan bukan program sebenarnya pada saat eksekusi. Pustaka beban digabungkan dan diberikan ke JCL pada saat eksekusi menggunakanJCLLIB atau STEPLIB.

Ada banyak utilitas kompilator mainframe yang tersedia untuk mengkompilasi program COBOL. Beberapa perusahaan korporat menggunakan alat Manajemen Perubahan sepertiEndevor, yang mengumpulkan dan menyimpan setiap versi program. Ini berguna untuk melacak perubahan yang dibuat pada 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 adalah utilitas kompiler COBOL IBM. Opsi kompilator diteruskan menggunakan parameter PARM. Dalam contoh di atas, RMODE menginstruksikan kompilator untuk menggunakan mode pengalamatan relatif dalam program. Program COBOL diteruskan menggunakan parameter SYSIN dan copybook adalah pustaka yang digunakan oleh program di SYSLIB.

JCL ini menghasilkan modul beban program sebagai output yang digunakan sebagai input untuk pelaksanaan JCL.

Menjalankan Program COBOL

Di bawah contoh JCL di mana program MYPROG dijalankan menggunakan file input MYDATA.URMI.INPUT dan menghasilkan dua file output yang ditulis ke 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
/*

Modul beban MYPROG terletak di MYDATA.URMI.LOADLIB. Ini penting untuk dicatat bahwa JCL di atas hanya dapat digunakan untuk modul COBOL non-DB2.

Meneruskan Data ke Program COBOL

Input data ke program batch COBOL dapat melalui file, parameter PARAM dan pernyataan SYSIN DD. Dalam contoh di atas:

  • Catatan data diteruskan ke MYPROG melalui file MYDATA.URMI.INPUT. File ini akan dirujuk dalam program menggunakan nama DD INPUT1. File dapat dibuka, dibaca dan ditutup dalam program.

  • Data parameter PARM ACCT5000 diterima di bagian LINKAGE dari program MYPROG dalam variabel yang ditentukan dalam bagian itu.

  • Data dalam pernyataan SYSIN diterima melalui pernyataan ACCEPT di bagian PROSEDUR program. Setiap pernyataan ACCEPT membaca satu catatan utuh (mis., CUST1 1000) ke dalam variabel penyimpanan yang berfungsi yang ditentukan dalam program.

Menjalankan program COBOL-DB2

Untuk menjalankan program COBOL DB2, utilitas IBM khusus digunakan dalam JCL dan program; Wilayah DB2 dan parameter yang diperlukan diteruskan sebagai masukan ke utilitas.

Langkah-langkah di bawah ini diikuti dalam menjalankan program COBOL-DB2:

  • Ketika program COBOL-DB2 dikompilasi, DBRM (Database Request Module) dibuat bersama dengan modul beban. DBRM berisi pernyataan SQL dari program COBOL dengan sintaksnya diperiksa agar benar.

  • DBRM terikat ke wilayah DB2 (lingkungan) di mana COBOL akan berjalan. Ini dapat dilakukan dengan menggunakan utilitas IKJEFT01 di JCL.

  • Setelah langkah pengikatan, program COBOL-DB2 dijalankan menggunakan IKJEFT01 (lagi) dengan pustaka beban dan pustaka DBRM sebagai input ke 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
/*

Pada contoh di atas, MYCOBB adalah program COBOL-DB2 yang dijalankan menggunakan IKJEFT01. Harap dicatat bahwa nama program, DB2 Sub-Sistem Id (SSID), nama Rencana DB2 diteruskan dalam pernyataan SYSTSIN DD. Perpustakaan DBRM ditentukan di STEPLIB.

Utilitas Kumpulan Data IBM

Program utilitas adalah program yang telah ditulis sebelumnya, banyak digunakan dalam mainframe oleh pemrogram sistem dan pengembang aplikasi untuk memenuhi kebutuhan sehari-hari, mengatur dan memelihara data. Beberapa di antaranya tercantum di bawah dengan fungsinya:

Nama Utilitas Kegunaan
IEHMOVE Memindahkan atau menyalin set data berurutan.
IEHPROGM Menghapus dan mengganti nama set data; katalog atau set data tidak katalog selain VSAM. <
IEHCOMPR Membandingkan data dalam set data berurutan.
IEBCOPY Salin, Gabungkan, kompres, cadangkan, atau pulihkan PDS.
IEFBR14

Tidak ada utilitas operasi. Digunakan untuk mengembalikan kontrol ke pengguna dan mengakhiri. Biasanya digunakan untuk membuat dataset kosong atau menghapus dataset yang sudah ada.

Misalnya, jika kumpulan data dikirimkan sebagai input ke program IEFBR14 dengan DISP = (OLD, DELETE, DELETE), kumpulan data tersebut akan dihapus saat pekerjaan selesai.

IEBEDIT Digunakan untuk menyalin bagian JCL yang dipilih. Sebagai Contoh, jika JCL memiliki 5 langkah dan kita hanya perlu menjalankan langkah 1 dan 3 saja, maka JCL IEBEDIT dapat dikodekan dengan kumpulan data yang berisi JCL sebenarnya untuk dieksekusi. Di SYSIN IEBEDIT, kita dapat menentukan LANGKAH1 dan LANGKAH3 sebagai parameter. Ketika JCL ini dijalankan, itu mengeksekusi LANGKAH 1 dan LANGKAH 3 dari JCL sebenarnya.
IDCAMS Membuat, menghapus, mengganti nama, katalog, set data uncatalog (selain PDS). Biasanya digunakan untuk mengelola dataset VSAM.

Program utilitas ini perlu digunakan dengan pernyataan DD yang sesuai di JCL untuk mencapai fungsionalitas yang ditentukan.

Ikhtisar DFSORT

DFSORT adalah utilitas IBM yang kuat yang digunakan untuk menyalin, mengurutkan, atau menggabungkan kumpulan data. Pernyataan SORTIN dan SORTINnn DD digunakan untuk menentukan set data masukan. Pernyataan SORTOUT dan OUTFIL digunakan untuk menentukan data keluaran.

Pernyataan SYSIN DD digunakan untuk menentukan kondisi urutkan dan penggabungan. DFSORT umumnya digunakan untuk mencapai fungsi di bawah ini:

  • SORT file input dalam urutan posisi kolom yang ditentukan dalam file.

  • INCLUDE atau OMIT record dari file input berdasarkan kondisi yang ditentukan.

  • File input SORT MERGE dalam urutan posisi kolom yang ditentukan dalam file.

  • SORT JOIN dua atau lebih file input berdasarkan JOIN KEY yang ditentukan (bidang di setiap file input).

  • Jika ada pemrosesan tambahan yang harus dilakukan pada file masukan, program USER EXIT dapat dipanggil dari program SORT. Misalnya, jika ada header / trailer yang akan ditambahkan ke file output, maka program COBOL tertulis USER dapat dipanggil dari program SORT untuk melakukan fungsi ini. Dengan menggunakan kartu kontrol, data dapat diteruskan ke program COBOL.

  • Sebaliknya, SORT dapat dipanggil secara internal dari program COBOL untuk mengatur file input dalam urutan tertentu sebelum diproses. Biasanya, ini tidak disarankan mengingat performa untuk file besar.

Ikhtisar ICETOOL

ICETOOL adalah utilitas DFSORT multiguna yang digunakan untuk melakukan berbagai operasi pada kumpulan data. Set data input dan output dapat ditentukan menggunakan nama DD yang ditentukan pengguna. Operasi file ditentukan dalam pernyataan TOOLIN DD. Kondisi tambahan dapat ditentukan dalam pernyataan DD 'CTL' yang ditentukan pengguna.

Beberapa utilitas ICETOOL diberikan di bawah ini:

  • ICETOOL dapat mencapai semua fungsi DFSORT dalam satu atau lebih kondisi.

  • SPLICE adalah operasi kuat dari ICETOOL yang mirip dengan SORT JOIN, tetapi dengan fitur tambahan. Itu dapat membandingkan dua atau lebih file pada bidang yang ditentukan dan membuat satu atau lebih file keluaran seperti file dengan catatan yang cocok, file dengan catatan yang tidak cocok, dll.

  • Data dalam satu file di posisi tertentu dapat DIPERLUKAN ke posisi lain dalam file yang sama atau berbeda.

  • Sebuah File dapat dipecah menjadi n file berdasarkan kondisi tertentu. Sebagai contoh, sebuah file yang berisi nama-nama karyawan dapat dibagi menjadi 26 file yang masing-masing berisi nama yang dimulai dengan A, B, C, dan seterusnya.

  • Kombinasi manipulasi file yang berbeda dimungkinkan menggunakan ICETOOL dengan sedikit eksplorasi alat.

Ikhtisar SYNCSORT

SYNCSORT digunakan untuk menyalin, menggabungkan, atau mengurutkan dataset dengan performa tinggi. Ini memberikan pemanfaatan terbaik dari sumber daya sistem dan operasi yang efisien dalam ruang alamat 31-bit dan 64-bit.

Ini dapat digunakan di baris DFSORT yang sama dan dapat mencapai fitur yang sama. Itu dapat dipanggil oleh JCL atau dari dalam program yang dikodekan dalam bahasa COBOL, PL / 1 atau Assembler. Ini juga mendukung program User Exit untuk dipanggil dari program SYNCSORT.

Trik pengurutan yang sering digunakan dengan menggunakan utilitas ini dijelaskan di bab berikutnya. Persyaratan kompleks, yang membutuhkan pemrograman besar dalam COBOL / ASSEMBLER dapat dicapai dengan menggunakan utilitas di atas dalam langkah sederhana.

Persyaratan aplikasi sehari-hari di dunia korporat yang dapat dicapai dengan menggunakan Program Utilitas diilustrasikan di bawah ini:

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               
/*

Opsi STOPAFT akan berhenti membaca file input setelah record ke-10 dan menghentikan program. Oleh karena itu, 10 catatan ditulis ke keluaran.

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 menghapus duplikat pada field yang ditentukan di SORT FIELDS. Pada contoh di atas, nomor karyawan pada posisi lapangan 1,15. File keluaran akan berisi nomor karyawan unik yang diurutkan dalam urutan menaik.

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)                      
/*

Di file input, konten di posisi 1,6 ditimpa ke posisi 47,6 lalu disalin ke file output. Operasi INREC OVERLAY digunakan untuk menulis ulang data dalam file input sebelum menyalin ke 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)                      
/*

Outputnya adalah:

data1    1000
data2    1002
data3    1004

Nomor urut 4 digit ditambahkan dalam keluaran pada posisi 10, mulai dari 1000 dan bertambah 2 untuk setiap catatan.

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)) 
/*

Outputnya adalah:

HDR       20110131
data1    
data2    
data3 
TRL       000000003

TOT menghitung jumlah record dalam file input. HDR dan TRL ditambahkan sebagai pengenal ke header / trailer, yang ditentukan oleh pengguna dan dapat disesuaikan sesuai kebutuhan pengguna.

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                                                     
/*

Outputnya adalah:

data1select   
data2 EMPTY  
data3select

Berdasarkan posisi ke-6 file, BUILD file output bervariasi. Jika posisi ke-6 adalah SPASI, maka teks "KOSONG" ditambahkan ke record input. Jika tidak, catatan masukan ditulis ke keluaran, sebagaimana adanya.

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 menyalin file di SYSUT1 ke file di SYSUT2. Harap dicatat bahwa file di SYSUT2 mengambil DCB yang sama dengan SYSUT1 pada contoh di atas.

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 menentukan bidang tempat kedua file dibandingkan.

  • REFORMAT FIELDS =? menempatkan 'B' (catatan yang cocok), '1' (ada di file1, tapi tidak di file2), atau '2' (ada di file2 tapi tidak di file1) di posisi pertama dari BUILD keluaran.

  • JOIN UNPAIRED melakukan gabungan luar penuh pada dua file.

Outputnya adalah:

MATCH File
1000
1003

NOMATCH1 File
1001
1005

NOMATCH2 File
1002

Fungsionalitas yang sama dapat dicapai dengan menggunakan ICETOOL juga.