JCL - Procedure

Il JCL Proceduressono un insieme di istruzioni all'interno di un JCL raggruppate insieme per eseguire una particolare funzione. Di solito, la parte fissa del JCL è codificata in una procedura. La parte variabile del lavoro è codificata all'interno del JCL.

È possibile utilizzare una procedura per ottenere l'esecuzione parallela di un programma utilizzando più file di input. È possibile creare un JCL per ogni file di input e una singola procedura può essere chiamata simultaneamente passando il nome del file di input come parametro simbolico.

Sintassi

Di seguito è riportata la sintassi di base della definizione di una procedura JCL:

//*
//Step-name EXEC procedure name

Il contenuto della procedura viene conservato all'interno del JCL per una procedura in-stream. I contenuti sono conservati all'interno di un diverso membro della libreria di base per una procedura catalogata. Questo capitolo spiegherà due tipi di procedure disponibili in JCL e poi finalmente vedremo come possiamo annidare varie procedure.

Procedura in-stream

Quando la procedura è codificata all'interno dello stesso membro JCL, viene chiamata procedura Instream. Dovrebbe iniziare con un'istruzione PROC e terminare con un'istruzione 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)
//*

Nell'esempio precedente, la procedura INSTPROC viene chiamata in STEP1 e STEP2 utilizzando diversi file di input. I parametri DSNAME e DATAC possono essere codificati con valori diversi durante la chiamata della procedura e questi sono chiamati comesymbolic parameters. L'input variabile al JCL come nomi di file, schede dati, valori PARM, ecc., Vengono passati come parametri simbolici alle procedure.

Durante la codifica dei parametri simbolici, non utilizzare KEYWORDS, PARAMETERS o SUB-PARAMETERS come nomi simbolici. Esempio: non usare TIME = & TIME ma sì, puoi usare TIME = & TM e si presume che sia un modo corretto di codificare i simboli.

Vengono chiamati i parametri simbolici definiti dall'utente JCL Symbols. Ci sono alcuni simboli chiamatisystem symbols, che vengono utilizzati per le esecuzioni dei lavori di accesso. L'unico simbolo di sistema utilizzato nei lavori batch da utenti normali è&SYSUID e questo viene utilizzato nel parametro NOTIFY nell'istruzione JOB.

Procedura catalogata

Quando la procedura viene separata dal JCL e codificata in un archivio dati diverso, viene chiamata a Cataloged Procedure. Un'istruzione PROC non è obbligatoria per essere codificata in una procedura catalogata. Di seguito è riportato un esempio di JCL in cui sta chiamando la procedura CATLPROC:

//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
//          DATAC=MYDATA.BASE.LIB1(DATA1)

Qui, la procedura CATLPROC è catalogata in MYCOBOL.BASE.LIB1. PROG, DATAC e DSNAME vengono passati come parametri simbolici alla procedura 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
//*

All'interno della procedura vengono codificati i parametri simbolici PROG e BASELB. Si noti che il parametro PROG all'interno della procedura viene sovrascritto dal valore nel JCL e quindi PGM assume il valore CATPRC1 durante l'esecuzione.

Procedure annidate

La chiamata di una procedura dall'interno di una procedura è chiamata a nested procedure. Le procedure possono essere annidate fino a 15 livelli. L'annidamento può essere completamente in-stream o catalogato. Non possiamo codificare una procedura in-stream all'interno di una procedura catalogata.

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

Nell'esempio precedente, JCL chiama la procedura INSTPRC1 in JSTEP1 e la procedura INSTPRC2 viene chiamata all'interno della procedura INSTPRC1. Qui, l'output di INSTPRC1 (SORTOUT) viene passato come input (SORTIN) a INSTPRC2.

UN SET statementviene utilizzato per definire i simboli comunemente utilizzati nelle fasi o procedure del lavoro. Inizializza i valori precedenti nei nomi simbolici. Deve essere definito prima del primo utilizzo dei nomi simbolici nel JCL.

Diamo un'occhiata alla descrizione seguente per capire un po 'di più sul programma sopra:

  • Il parametro SET inizializza DSNM1 = INPUT1 e DSNM2 = OUTPUT1.

  • Quando INSTPRC1 viene richiamato in JSTEP1 di JCL, DSNM1 = MYDATA.URMI.INPUT1 e DSNM2 = OUTPUT1., Ovvero il valore inizializzato nell'istruzione SET viene reimpostato con il valore impostato in una qualsiasi delle procedure / fasi del lavoro.

  • Quando INSTPRC2 viene chiamato in STEP2 di INSTPRC1, DSNM1 = MYDATA.URMI.INPUT1 e DSNM2 = MYDATA.URMI.OUTPUT2.