Spécifiez DD DUMMY dans le JCL de remplacement pour ceux qui ne sont pas remplacés.

//STEP1.IN1	DD DUMMY
// 		DD DSN=MYDATA.URMI.IN2,DISP=SHR
//		DD DUMMY

Le morceau de code suivant montre la référence de chaque version de GDG -

Step1 input: (0)
Step1 output: (+1)
Step2 input: (+1)
Step2 output: (+2)

Lorsque le fichier est utilisé comme entrée dans IDCAMS, le travail se termine par un avertissement (code retour 4) si le fichier est vide.

Spécifiez RESTART = STEP2 dans l'instruction JOB. Et incluez la construction IF-THEN-ELSE comme ci-dessous -

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

Les données peuvent être transmises à un programme COBOL via des fichiers, un paramètre PARM et une instruction SYSIN DD.

La partie variable du JCL peut être spécifiée à l'aide de paramètres symboliques dans le JOB et les parties statiques peuvent être spécifiées dans le PROC. Par exemple, si le nom de fichier change pour chaque JOB qui utilise le PROC, alors la partie variable du nom de fichier peut être codée dans JCL à l'aide du paramètre symbolique.

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

Utilisez IEBGENER et transmettez le fichier existant dans SYSUT1. Passez le nouveau fichier dans SYSUT2 et mentionnez DCB = *. SYSUT1 pour obtenir le même DCB que celui de l'ensemble de données SYSUT1.

En utilisant les paramètres série UNIT et VOL dans l'instruction DD de l'ensemble de données.

Les instructions DD factices, les spécifications de la carte de données, les instructions PROC, JOB, PROC ne peuvent pas être codées dans un membre INCLUDE. Une instruction INLCUDE peut être codée dans un membre INCLUDE et une imbrication supplémentaire peut être effectuée jusqu'à 15 niveaux.

Code COND = UNIQUEMENT à l'étape 2.

Utilisation du paramètre RD dans l'instruction JOB / EXEC. Les codes abend pour lesquels RESTART doit être exécuté peuvent être mentionnés dans le membre SCHEDxx de la bibliothèque IBM System parmlib.

En utilisant IEBEDIT dans un JCL, les étapes sélectionnées d'un autre JCL peuvent être exécutées. Dans le JCL ci-dessus, le JCL d'entrée avec 10 étapes est présent dans MYDATA.URMI.JOBS (INPUTJOB). STEP3 et STEP7 sont spécifiés dans SYSIN d'IEBEDIT, de sorte que ces deux étapes sont exécutées.

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

Lorsqu'il est défini avec DISP = (NEW, KEEP) au moment de la création. Dans le cas d'un GDG, la génération la moins récente n'est pas cataloguée si la base GDG a été définie avec le paramètre NOEMPTY lorsque la LIMITE est atteinte. Toutes les générations ne sont pas cataloguées lorsqu'elles sont codées avec EMPTY.

La base GDG peut être créée à l'aide de l'utilitaire IDCAMS. EMPTY décatalogue toutes les générations lorsque la LIMITE est atteinte. SCRATCH supprime physiquement la génération lorsqu'elle n'est pas cataloguée. (LIMIT spécifie le nombre maximum de versions que la base GDG peut contenir).

Dans le programme SORT / ICETOOL, SKIPREC = n peut être utilisé, ce qui ignore les n premiers enregistrements, puis copie le reste dans le fichier de sortie.

//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 et ENDREC restreignent la lecture du fichier d'entrée sur le numéro d'enregistrement spécifié.

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

Une erreur de temporisation de travail peut se produire lorsque le programme prend plus de temps que la limite de temps pour la classe spécifiée. C'est ce qu'on appelle une fin anormale S322. Cette erreur se produit lorsqu'il y a des erreurs de bouclage dans le programme et qu'il n'atteint pas la fin.
Si les données traitées dans le programme sont réellement énormes et nécessitent plus de temps que la limite de classe, le paramètre TIME peut être codé comme TIME = 1440 pour obtenir un temps infini jusqu'à la fin du travail.

Le paramètre ESPACE de l'ensemble de données de copie d'image peut être augmenté en fonction du volume de la table et le travail peut être redémarré à partir de l'étape 2.

NOTIFY = l'ID utilisateur de la personne (et non de l'expéditeur) peut être spécifié dans l'instruction JOB afin que l'utilisateur reçoive une notification avec le code de retour à la fin du travail. Mais le journal des travaux est présent dans le spool uniquement sous l'ID utilisateur de l'expéditeur.

L'option FTOV dans SORT aide à convertir FB en fichier 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 signifie Job Control Language, qui fournit les spécifications nécessaires pour traiter un travail. Il s'agit d'un ensemble d'instructions de contrôle qui fournit les spécifications nécessaires pour traiter un travail. C'est une interface entre les programmes et le système d'exploitation MVS.

MVS signifie Multiple Virtual Storage, qui est le système d'exploitation des systèmes mainframe IBM.

Les identificateurs sont deux barres obliques (//) commençant à partir de la colonne numéro 1. Toutes les instructions JCL commencent par des identificateurs, à l'exception de deux exceptions - Pour une instruction de délimitation, / * commençant à col 1 et pour une instruction de commentaire, // * commençant à col 1.

Entrée -> Conversion -> Exécution -> Sortie -> Copie papier -> Purge

Le JCL avec le PROC est converti en un texte interprété pour être compris par JES et stocké dans un ensemble de données, que nous appelons SPOOL.

Lorsque le travail atteint sa priorité la plus élevée, il est repris pour exécution à partir de la file d'attente des travaux. Le JCL est lu à partir du SPOOL, le programme est exécuté et la sortie est redirigée vers la destination de sortie correspondante, comme spécifié dans le JCL.

Spécifie les informations requises pour SPOOLing du travail, telles que l'ID du travail, la priorité d'exécution, l'ID utilisateur à notifier à la fin du travail.

JCL se termine par une instruction null qui est facultative. Pour un code d'instruction nul uniquement // à partir de la colonne 1. Toutes les lignes suivantes ne seront pas exécutées.

En fonction de la durée et du nombre de ressources requises par le poste, les entreprises attribuent différentes classes d'emplois. Ceux-ci peuvent être visualisés comme des planificateurs individuels utilisés par le système d'exploitation pour recevoir les travaux. Placer les tâches dans le bon planificateur facilitera l'exécution des tâches. Certaines entreprises ont des classes différentes pour les emplois dans les environnements de test et de production. Les valeurs valides pour le paramètre CLASS sont les caractères A à Z et 0 à 9 numériques (de longueur 1). Voici la syntaxe - CLASS = 0 à 9 | De A à Z

Le système envoie le message de réussite ou d'échec (code de condition maximum) à l'utilisateur spécifié dans ce paramètre. Syntaxe - NOTIFY = "userid | & SYSUID"

TYPRUN = SCAN vérifie les erreurs de syntaxe du JCL sans l'exécuter.

Le paramètre DSN fait référence au nom de l'ensemble de données physique d'un ensemble de données nouvellement créé ou existant. La valeur DSN peut être constituée de sous-noms de 1 à 8 caractères chacun, séparés par des points et d'une longueur totale de 44 caractères (alphanumériques).

Le paramètre DISP est utilisé pour décrire l'état de l'ensemble de données, la disposition à la fin de l'étape de travail en cas d'achèvement normal et anormal. DISP n'est pas requis dans une instruction DD uniquement lorsque l'ensemble de données est créé et supprimé dans la même étape de travail (comme les ensembles de données temporaires). Syntaxe - DISP = (état, disposition normale, disposition anormale)

Le paramètre SPACE spécifie l'espace requis pour l'ensemble de données dans le DASD (Direct Access Storage Disk). Syntaxe - SPACE = (spcunits, (pri, sec, dir), RLSE)

Le paramètre DCB (Data Control Block) détaille les caractéristiques physiques d'un jeu de données. Ce paramètre est obligatoire pour les ensembles de données nouvellement créés à l'étape de travail. LRECL est la longueur de chaque enregistrement contenu dans l'ensemble de données. RECFM est le format d'enregistrement de l'ensemble de données.

Un ensemble de données temporaire est celui qui est créé et supprimé dans un travail et est déclaré comme DSN = && TEMP. Ne mentionnez pas les paramètres DSN avec cela.

Code SYSOUT = *, les données seront alors dirigées vers le spool.

IEFBR14 n'est pas un utilitaire d'opération. Utilisé pour renvoyer le contrôle à l'utilisateur et terminer. Il est généralement utilisé pour créer un ensemble de données vide ou supprimer un ensemble de données existant.

DISP = (NOUVEAU, PASS). Le PASS n'est valable que pour une disposition normale. Ceci est utilisé lorsque l'ensemble de données doit être transmis et traité par l'étape de travail suivante dans un JCL.

L'utilitaire IKJEFT01 est utilisé pour exécuter un programme COBOL-DB2.

DSN (Dataset Name) est utilisé pour déclarer le nom de l'ensemble de données dans une instruction DD.

L'instruction PEND est utilisée pour terminer la procédure in-stream.

Pour faire référence à la dernière génération d'un GDG, nous utilisons la référence comme (+0).

COND = (12, LT, STEP1), il lira la condition comme étant 12 inférieur à 8, ce qui est faux, donc cette étape sera exécutée.

À l'étape SORT, mentionnez le nom du jeu de données SYSIN & SYSOUT et le code de la carte de tri SORT FIELDS = COPY pour copier les données du fichier d'entrée vers le fichier de sortie.

Cette affirmation est vraie.

L'utilitaire SORT est utilisé pour trier un fichier dans un ordre particulier basé sur la carte de tri.

IEBUPDTE est utilisé pour mettre à jour PDS.

Le paramètre SPACE spécifie l'espace requis pour l'ensemble de données dans le DASD (Direct Access Storage Disk). Syntaxe - SPACE = (spcunits, (pri, sec, dir), RLSE)

Cette affirmation est vraie.