Question
Je suis un peu confus sur la façon de créer une variable symbolique dans JCL pour une mission que je fais dans ma classe COBOL.
Par exemple, je suis censé « Spécifier un paramètre symbolique pour l'option PARM et spécifiez TEST et apost comme valeur par défaut. »
Comment désigne l'option « PARM » être un paramètre symbolique?
EDIT: Pardonnez la surveillance; il semble que j'oublié de mentionner ce que je OS en cours d'exécution. Je suis en train d'écrire ce fichier JCL dans z / OS.
Merci d'avance!
EDIT:
@avisser:
Alors, ce que vous dites est que je peux l'appeler « & PARM = « TEST, apost » » et, si je voulais changer ce paramètre quand je lance ce proc avec une autre JCL, les parms énumérés peuvent être changé du JCL appelant?
EDIT:
@avisser:
Ouais, désolé, je dois vraiment travailler sur être plus précis ... Je suis dans ma COBOL JCL, appelle le compilateur COBOL (IGYCRCTL), l'éditeur de liens (HEWL) et un programme fetch (EXEC PGM =).
EDIT:
Peut-être qu'il serait utile de voir ce que ma sortie est. J'apprécie vraiment tous ceux qui ont essayé d'aider à ce jour.
Sortie:
------ ------ STATISTIQUES JES2 JOB
37 CARDS READ
61 SYSOUT PRINT RECORDS
0 SYSOUT PUNCH RECORDS
3 SYSOUT SPOOL KBYTES
0.00 MINUTES EXECUTION TIME
!! FIN DE JES SPOOL FICHIER !!
1 // JOB KC03CEFA, Matt R ', MSGCLASS = H, TYPRUN = SCAN JOB07731
// *
2 // Step01 EXEC PGM = IGYCRCTL, & REGION = 248K,
// & PARM = 'TEST, apost'
3 // STEPLIB DD DSN = IGY340.SIGYCOMP, DISP = SHR
/ *
4 // syslin DD & DSN = && OBJSET, UNITE = DISK, SPACE = (TRK, (3,3)),
// & DISP = (NOUVEAU, PASS, DELETE)
5 // SYSPRINT DD SYSOUT = *
6 // SYSUT1 DD UNIT = DISK, SPACE = (CYL, (1,1))
7 // SYSUT2 DD UNIT = DISK, SPACE = (CYL, (1,1))
8 // SYSUT3 DD UNIT = DISK, SPACE = (CYL, (1,1))
9 // SYSUT4 DD UNIT = DISK, SPACE = (CYL, (1,1))
10 // SYSUT5 DD UNIT = DISK, SPACE = (CYL, (1,1))
11 // SYSUT6 DD UNIT = DISK, SPACE = (CYL, (1,1))
12 // SYSUT7 DD UNIT = DISK, SPACE = (CYL, (1,1))
// *
// *
13 // STEP02 EXEC PGM = HEWL, & COND =, & reagion = 2048K,
// & PARM =
14 // SYSLIB DD DSN = CEE.SCEELKED, DISP = SHR
15 // syslin DD & DSN = && OBJSET, & DISP = (VIEUX, DELETE)
16 // SYSLMOD DD DSN = && TEMPLIB (PGM6),
// SPACE = (1024, (50,20,1)), UNITE = DISK,
// DISP = (NOUVEAU, CATLG, SUPPRIMER)
17 // SYSPRINT DD SYSOUT = *
18 // printer DD SYSOUT = *
19 // SYSUT1 DD = UNITE DISK, ESPACE = (TRK, (10,10))
// *
// *
20 // Step01 EXEC PGM = PGM6, & PARM = TERMTHDACT (DUMP)
21 // STEPLIB DD DSN = && TEMPLIB, DISP = SHR
22 // CEEDUMP
23 // SYSUDUMP
24 // printer DD SYSOUT = *
25 // PRODUITS DD DSN = KC02322.CSCI465.SP09 (DATA1), DISP = SHR
26 // SYSIN DD *
!! FIN DE JES SPOOL FICHIER !!
STMT NO. MESSAGE
2 IEFC630I NON IDENTIFIE PAR MOTS CLÉS & REGION
2 IEFC630I NON IDENTIFIÉ MOTS CLÉS & PARM
4 IEFC630I MOTS CLÉS & NON IDENTIFIÉ DSN
4 IEFC630I MOTS CLÉS & NON IDENTIFIÉ DISP
13 IEFC630I NON IDENTIFIE PAR MOTS CLÉS & COND
13 IEFC630I NON IDENTIFIÉ MOTS CLÉS & reagion
13 IEFC630I NON IDENTIFIÉ MOTS CLÉS & PARM
15 IEFC630I NON IDENTIFIÉ MOTS CLÉS & DSN
15 IEFC630I NON IDENTIFIÉ MOTS CLÉS & DISP
20 IEFC630I NON IDENTIFIÉ MOTS CLÉS & PARM
22 IEFC605I UNIDENTIFIED DOMAINE D'UTILISATION
23 IEFC605I D'OPÉRATION NON IDENTIFIÉ CHAMP
!! FIN DE FICHIER JES SPOOL !!
La solution
sont des noms précédés d'une esperluette. Lorsqu'il est utilisé dans un JCL, lors de l'exécution, ils sont convertis dans la valeur fournie. Une façon de les créer (z / OS) utilise un
// SET name = value
. Si vous utilisez un PARM, vous devez concevoir votre programme afin qu'il puisse travailler avec un. la mission est peut-être sur la façon de faire que (indice: section de liaison). Ou est-JCL une partie de votre classe COBOL?
TEST et regard apost à moi comme directives du compilateur. Je ne sais pas si vous pouvez les spécifier dans votre programme, à mon lieu de travail, nous leur fournissons uniquement lorsque vous appelez le compilateur.
EDIT:
Ok cela est un peu inhabituel pour moi, comme nous avons tendance à compiler et exécuter nos programmes en cours d'eau JCL séparés. Mais peu importe.
Prendre votre deuxième déclaration:
2 //STEP01 EXEC PGM=IGYCRCTL,®ION=248K,
// &PARM='TEST,APOST'
REGION et PARM sont dits paramètres de position et ils sont des mots clés, pas vraiment destinés à être présentés comme des noms symboliques, bien que vous êtes libre de le faire (ce qui explique les messages « KEYWORD Non Identifiés »).
L'utilisation commune - le cas échéant - est de fournir des noms symboliques pour opérandes de
ces paramètres. Et, évidemment, vous devez définir une valeur pour eux d'abord, par exemple:
// SET OPTIONS='TEST,APOST'
//STEP01 EXEC PGM=IGYCRCTL,REGION=248K,
// PARM=&OPTIONS
Autres conseils
Ok, je l'ai fait quelques recherches, et, avec les conseils que avisser m'a donné, j'ai pu comprendre ce que je devais faire. Ainsi, à titre de référence pour toute personne qui pourrait avoir cette question (ou similaire), voici ce que j'ai compris:
Étape 1: Créer un "PROC" avec les variables que vous allez utiliser
.ex. Je voulais utiliser des variables pour le « PARM » dans mon compilateur COBOL qui avait les valeurs par défaut de « TEST » et « apost », donc je l'ai écrit quelque chose comme:
//PROC1 PROC CPARM='TEST,APOST',
Étape 2: Utilisez ces paramètres symboliques nouvellement définis dans votre étape de JCL réelle. Le caractère « & » montre que ce qui le suit est un paramètre symbolique.
ex. J'ai utilisé le mentionné ci-dessus « CPARM » pour ma compilation COBOL étape:
//COB EXEC PGM=IGYCRCTL,REGION=&CREGION,
// PARM='&CPARM'
Étape 3:. Terminez votre "PROC" une déclaration "PEND" après votre étape réelle
ex. Après avoir énuméré toutes mes variables et j'ai énuméré toutes les étapes de compilation (nom du compilateur, où le compilateur peut être trouvé, et, comme on peut le voir juste avant la déclaration PEND, les déclarations SYSUT1-SYSUT7), placez votre mot-clé PEND:
//SYSUT7 DD UNIT=DISK,SPACE=(CYL,(1,1))
// PEND
Étape 4: Ajoutez des étapes JCL supplémentaires et / ou du code à votre fichier source et vous êtes hors
Notes:
-Vous pouvez avoir plus d'une instruction PROC dans un seul fichier JCL. J'ai eu trois: un pour la compilation COBOL, un pour l'éditeur de liens et un pour le programme chercher. J'ai également le code COBOL dans le même fichier que mes déclarations PROC sont.
-Ce a eu lieu sur un IBM Mainframe exécutant z / OS.
-Above, on peut voir que mon « CPARM » variable est définie sur la valeur par défaut 'TEST, apost. Il est possible d'avoir une variable être nulle par défaut en laissant simplement le champ vide (ex. CPARM =,).
-Vous avez pu remarquer que, après la définition de CPARM, il y a une virgule; c'est parce que j'ai plusieurs variables après. S'il vous plaît rappelez-vous que le dernier paramètre symbolique que vous créez pour une PROC donnée ne devrait rien le suivant (ie. Pas de virgule). Vous pouvez, bien sûr, placer une ligne de commentaire (// *), un autre PROC ou code réel après, mais le dernier paramètre symbolique ne devrait rien suivant sur la même ligne.