Specificare DD DUMMY nel JCL sovrascrivente per quelli che non vengono sovrascritti.
//STEP1.IN1 DD DUMMY
// DD DSN=MYDATA.URMI.IN2,DISP=SHR
// DD DUMMY
La parte di codice seguente mostra il riferimento di ciascuna versione GDG:
Step1 input: (0)
Step1 output: (+1)
Step2 input: (+1)
Step2 output: (+2)
Quando il file viene utilizzato come input in IDCAMS, il lavoro viene completato con un avviso (codice di ritorno 4) se il file è vuoto.
Specificare RESTART = STEP2 nell'istruzione JOB. E includi il costrutto IF-THEN-ELSE come sotto -
//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
I dati possono essere passati a un programma COBOL tramite file, parametro PARM e istruzione SYSIN DD.
La parte variabile del JCL può essere specificata utilizzando parametri simbolici nel JOB e le parti statiche possono essere specificate in PROC. Ad esempio, se il nome file cambia per ogni JOB che utilizza PROC, la parte variabile del nome file può essere codificata in JCL utilizzando il parametro simbolico.
//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
Usa IEBGENER e passa il file esistente in SYSUT1. Passa il nuovo file in SYSUT2 e menziona DCB = *. SYSUT1 per ottenere lo stesso DCB di quello del set di dati SYSUT1.
Utilizzando i parametri seriali UNIT e VOL nell'istruzione DD del set di dati.
Le istruzioni DD fittizie, le specifiche della scheda dati, le istruzioni PROC, JOB, PROC non possono essere codificate in un membro INCLUDE. Un'istruzione INLCUDE può essere codificata all'interno di un membro INCLUDE e l'ulteriore nidificazione può essere eseguita fino a 15 livelli.
Codice COND = SOLO in STEP2.
Utilizzo del parametro RD nell'istruzione JOB / EXEC. I codici di fine anomala per cui è necessario eseguire RESTART possono essere menzionati nel membro SCHEDxx della libreria parmlib di sistema IBM.
Utilizzando IEBEDIT in un JCL, è possibile eseguire i passaggi selezionati di un altro JCL. Nel JCL precedente, l'input JCL con 10 passaggi è presente in MYDATA.URMI.JOBS (INPUTJOB). STEP3 e STEP7 sono specificati in SYSIN di IEBEDIT, in modo che questi due passaggi vengano eseguiti.
//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)
/*
Quando è definito con DISP = (NEW, KEEP) al momento della creazione. Nel caso di un GDG, la generazione meno recente non è catalogata se la base GDG era stata definita con il parametro NOEMPTY al raggiungimento del LIMIT. Tutte le generazioni non sono catalogate se codificate con EMPTY.
La base GDG può essere creata utilizzando l'utility IDCAMS. EMPTY cancella tutte le generazioni quando viene raggiunto il LIMITE. SCRATCH elimina fisicamente la generazione, quando non è catalogata. (LIMIT specifica il numero massimo di versioni che la base GDG può contenere).
Nel programma SORT / ICETOOL è possibile utilizzare SKIPREC = n, che salta i primi n record e quindi copia il resto nel file di output.
//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
/*
STARTREC e ENDREC limitano la READ dal file di input al numero di record specificato.
//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
//*
Un errore di timeout del lavoro può verificarsi quando il programma impiega più tempo del limite di tempo per la classe specificata. Questo è chiamato fine anomalo S322. Questo errore si verifica quando ci sono alcuni errori di loop nel programma e non raggiunge il completamento.
Se i dati elaborati nel programma sono veramente enormi e richiedono più tempo rispetto al limite di classe, il parametro TIME può essere codificato come TIME = 1440 per ottenere un tempo infinito fino al completamento del lavoro.
Il parametro SPACE del set di dati della copia dell'immagine può essere aumentato in base al volume della tabella e il lavoro può essere riavviato dal passaggio 2.
NOTIFY = l'ID utente della persona (non il mittente) può essere specificato nell'istruzione JOB in modo che l'utente riceva una notifica con il codice di ritorno al completamento del lavoro. Ma il log del lavoro è presente nello spool solo sotto l'ID utente del mittente.
L'opzione FTOV in SORT aiuta a convertire FB in file VB.
//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
//*
JCL sta per Job Control Language che fornisce le specifiche necessarie per elaborare un lavoro. È un insieme di istruzioni di controllo che fornisce le specifiche necessarie per elaborare un lavoro. È un'interfaccia tra programmi e sistema operativo MVS.
MVS è l'acronimo di Multiple Virtual Storage, che è il sistema operativo per i sistemi mainframe IBM.
Gli identificatori sono due barre (//) a partire dalla colonna numero 1. Tutte le istruzioni JCL iniziano con identificatori ad eccezione di due eccezioni: per un'istruzione delimitatore, / * che inizia con la colonna 1 e per un'istruzione di commento, // * che inizia con la colonna 1.
Input -> Conversion -> Execution -> Output -> Hard copy -> Purge
Il JCL insieme al PROC viene convertito in un testo interpretato per essere compreso da JES e memorizzato in un set di dati, che chiamiamo SPOOL.
Quando il lavoro raggiunge la sua massima priorità, viene avviato per l'esecuzione dalla coda dei lavori. Il JCL viene letto da SPOOL, il programma viene eseguito e l'output viene reindirizzato alla destinazione di output corrispondente come specificato nel JCL.
Specifica le informazioni richieste per lo SPOOLing del lavoro come ID lavoro, priorità di esecuzione, ID utente da notificare al completamento del lavoro.
JCL viene terminato da un'istruzione null che è facoltativa. Solo per un codice di istruzione null // a partire dalla colonna 1. Tutte le righe successive non verranno eseguite.
In base alla durata e al numero di risorse richieste dal lavoro, le aziende assegnano diverse classi di lavoro. Questi possono essere visualizzati come pianificatori individuali utilizzati dal sistema operativo per ricevere i lavori. Posizionare i lavori nello scheduler giusto aiuterà nella facile esecuzione dei lavori. Alcune aziende hanno classi diverse per i lavori in ambiente di test e produzione. I valori validi per il parametro CLASS sono caratteri da A a Z e da 0 a 9 numerici (di lunghezza 1). Di seguito è riportata la sintassi: CLASS = da 0 a 9 | Dalla A alla Z
Il sistema invia il messaggio di esito positivo o negativo (codice condizione massima) all'utente specificato in questo parametro. Sintassi - NOTIFY = "userid | & SYSUID"
TYPRUN = SCAN controlla gli errori di sintassi del JCL senza eseguirlo.
Il parametro DSN fa riferimento al nome del set di dati fisico di un set di dati appena creato o esistente. Il valore DSN può essere composto da sotto-nomi di lunghezza da 1 a 8 caratteri ciascuno, separati da punti e di lunghezza totale di 44 caratteri (alfanumerici).
Il parametro DISP viene utilizzato per descrivere lo stato del set di dati, la disposizione alla fine della fase di lavoro al completamento normale e anormale. DISP non è richiesto in un'istruzione DD solo quando il set di dati viene creato ed eliminato nella stessa fase del lavoro (come i set di dati temporanei). Sintassi - DISP = (stato, disposizione normale, disposizione anormale)
Il parametro SPACE specifica lo spazio richiesto per il set di dati nel DASD (Direct Access Storage Disk). Sintassi: SPAZIO = (spcunits, (pri, sec, dir), RLSE)
Il parametro Data Control Block (DCB) descrive in dettaglio le caratteristiche fisiche di un set di dati. Questo parametro è richiesto per i set di dati appena creati nella fase del lavoro. LRECL è la lunghezza di ogni record contenuto nel set di dati. RECFM è il formato di registrazione del set di dati.
Un dataset temporaneo è quello che viene creato ed eliminato all'interno di un lavoro ed è dichiarato come DSN = && TEMP. Non menzionare i parametri DSN con questo.
Codice SYSOUT = *, quindi i dati verranno indirizzati allo spool.
IEFBR14 non è un'utilità operativa. Utilizzato per restituire il controllo all'utente e terminare. Di solito viene utilizzato per creare un set di dati vuoto o eliminare un set di dati esistente.
DISP = (NUOVO, PASSATO). PASS è valido solo per la normale disposizione. Viene utilizzato quando il set di dati deve essere passato ed elaborato dalla fase di lavoro successiva in un JCL.
L'utility IKJEFT01 viene utilizzata per eseguire un programma COBOL-DB2.
DSN (Dataset Name) viene utilizzato per dichiarare il nome del set di dati in un'istruzione DD.
L'istruzione PEND viene utilizzata per terminare la procedura in-stream.
Per fare riferimento all'ultima generazione di un GDG, usiamo il riferimento come (+0).
COND = (12, LT, STEP1), leggerà la condizione come 12 inferiore a 8, che è falso, quindi questo passaggio verrà eseguito.
Nella fase SORT menzionare il nome del set di dati SYSIN e SYSOUT e nel codice della scheda di ordinamento SORT FIELDS = COPY per copiare i dati dal file di input al file di output.
Questa affermazione è vera.
L'utility SORT viene utilizzata per ordinare un file in un ordine particolare in base alla scheda di ordinamento.
IEBUPDTE viene utilizzato per aggiornare PDS.
Il parametro SPACE specifica lo spazio richiesto per il set di dati nel DASD (Direct Access Storage Disk). Sintassi: SPAZIO = (spcunits, (pri, sec, dir), RLSE)
Questa affermazione è vera.