2009-04-11 4 views
3

Je suis un peu confus sur la façon de créer une variable symbolique dans JCL pour une affectation que je fais dans ma classe COBOL. Par exemple, je suis supposé "Spécifier un paramètre symbolique pour l'option PARM et spécifier TEST et APOST comme valeur par défaut". Comment définir l'option "PARM" comme un paramètre symbolique?Symbolic JCL Confusion

EDIT: Pardonnez l'oubli; il semble que j'ai oublié de mentionner quel système d'exploitation je cours dedans. J'écris ce dossier de 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 lorsque je lance ce proc avec une autre instruction JCL, les paramètres listés peuvent être modifiés depuis le JCL appelant?

EDIT:

@avisser:

Ouais, désolé, je dois vraiment travailler sur être plus précis ... Dans mon COBOL JCL, j'appelle le compilateur COBOL (de IGYCRCTL), le lien Editeur (HEWL) et un programme de récupération (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 jusqu'à présent.

sortie:

------ ------ JES2 JOB STATISTIQUES

 37 CARDS READ                            

     61 SYSOUT PRINT RECORDS                         

     0 SYSOUT PUNCH RECORDS                         

     3 SYSOUT SPOOL KBYTES                         

    0.00 MINUTES EXECUTION TIME                         

!! FICHIER SPOOL FIN DE JES !! 1 // KC03CEFA JOB, Matt R ', MSGCLASS = H, TYPRUN = SCAN JOB07731 // *
2 // Step01 EXEC PGM = IGYCRCTL, & REGION = 248K,
& // PARM =' ESSAI, 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 UNITE = DISQUE, ESPACE = (CYL, (1,1))
9 // SYSUT4 DD UNITE = DISQUE, ESPACE = (CYL, (1,1)
10 // SYSUT5 DD UNIT = DISQUE, ESPACE = (CYL, (1,1))
11 // SYSUT6 DD UNITE = DISQUE, ESPACE = (CYL, (1,1))
12 // SYSUT7 DD UNIT = DISQUE, ESPACE = (CYL, (1,1))
// * // *

13 // STEP02 EXEC PGM = HEWL, & COND =, & reagion = 2048K,
& // PARM = // SYSLIB DD DSN = CEE.SCEELKED, DISP = SHR
15 // syslin DD & DSN = & & OBJSET, & = DISP (OLD, DELET E)
16 // SYSLMOD DD DSN = & & TEMPLIB (PGM6),
// SPACE = (1.024, (50,20,1)), UNIT = DISK,
// = DISP (NEW, CATLG , DELETE)
17 // SYSPRINT DD SYSOUT = *
18 // IMPRIMANTE DD SYSOUT = *
19 // SYSUT1 DD UNIT = DISK, SPACE = (TRK, (10,10))
// *

// * // 20 Step01 EXEC PGM = PGM6, & PARM = TERMTHDACT (DUMP)
21 // STEPLIB DD D SN = & & TEMPLIB, DISP = SHR
22 // CEEDUMP
23 // SYSUDUMP
24 // IMPRIMANTE DD SYSOUT = *
25 // PRODUITS DD DSN = KC02322.CSCI465.SP09 (DATA1), DISP = SHR
26 // SYSIN DD *
!! FICHIER SPOOL FIN DE JES !! STMT NO. MESSAGE 2 IEFC630I UNIDENTIFIED MOTS & REGION 2 IEFC630I UNIDENTIFIED MOTS & PARAM 4 IEFC630I UNIDENTIFIED MOTS & DSN 4 IEFC630I UNIDENTIFIED MOTS & DISP 13 IEFC630I UNIDENTIFIED MOTS & COND 13 IEFC630I KEYWORD UNIDENTIFIED & reagion 13 IEFC630I UNIDENTIFIED MOTS & PARM 15 IEFC630I MOT-CLÉ NON IDENTIFIÉ & DSN 15 IEFC630I MOT-CLÉ NON IDENTIFIÉ & DISP 20 IEFC630I UNIDENTI CLAVIER FIED & PARC 22 IEFC605I FONCTIONNEMENT NON IDENTIFIÉ CHAMP 23 IEFC605I FONCTIONNEMENT NON IDENTIFIÉ CHAMP !! FICHIER SPOOL FIN DE JES !!

+0

JCL == langage de contrôle du travail - c'est un terme générique. Vous devez spécifier quel système d'exploitation vous demandez à propos de –

Répondre

5

Les paramètres symboliques sont des noms précédés d'une esperluette. Lorsqu'elles sont utilisées dans une instruction JCL, elles sont converties dans la valeur fournie lors de l'exécution. Une façon de les créer (sur z/OS) utilise un

// SET name = value

déclaration

. Si vous utilisez un PARM, vous devez concevoir votre programme de sorte qu'il puisse fonctionner avec un. Peut-être que l'affectation est sur la façon de faire que (indice: section de liaison). Ou est-ce que JCL fait partie de votre classe COBOL?

TEST et APOST me ressemblent comme des directives de compilation. Je ne sais pas si vous pouvez les spécifier dans votre programme, sur mon lieu de travail nous ne les fournissons que lors de l'appel du compilateur.

EDIT:

Ok c'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,&REGION=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 expliquera les messages "MOT-CLÉ NON IDENTIFIÉ").
L'usage commun - le cas échéant - est de fournir des noms symboliques pour les 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 
+0

Wow. +1 juste pour savoir ce que JCL est. –

+0

J'ai fini par comprendre (et c'est un peu différent de ce que vous m'avez montré), mais vos conseils ont été très utiles. Merci beaucoup. – Enyalius

+0

comme mentionné, SET est juste une façon de définir une valeur à un paramètre. Les fournir sur l'appel de procédure est une autre, mais je pensais que SET serait plus facile à démarrer avec. –

3

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. Donc, pour référence future pour toute personne qui pourrait avoir cette question (ou un semblable), voici ce que j'ai compris:

Étape 1: Créez 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', 

Etape 2: Utilisez ces paramètres symboliques nouvellement définis dans votre étape JCL actuelle. Le caractère "&" montre que tout ce qui 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 répertorié toutes mes variables et répertorié toutes les étapes de compilation (nom du compilateur, où le compilateur peut être trouvé et, comme on peut le voir juste avant l'instruction PEND, les instructions 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 le code à votre fichier source et vous êtes hors!

Notes:

-Vous pouvez avoir plus d'une instruction PROC dans un seul fichier JCL. J'en ai eu trois: une pour la compilation COBOL, une pour l'éditeur de liens et une pour le programme de recherche. J'ai également le code COBOL dans le même fichier que mes instructions PROC.

-Cela s'est déroulé sur un système principal IBM exécutant z/OS. -Au dessus, on peut voir que ma variable "CPARM" a la valeur par défaut "TEST, APOST". Il est possible d'avoir une variable nulle par défaut en laissant simplement le champ vide (ex: CPARM =,).

-Vous avez peut-être remarqué qu'après la définition CPARM, il y a une virgule; C'est parce que j'ai plus de variables après. Rappelez-vous que le dernier paramètre symbolique que vous créez pour un PROC donné ne doit rien avoir suivi (c'est-à-dire aucune virgule). Vous pouvez, bien sûr, placer une ligne de commentaire (// *), un autre PROC ou un code réel par la suite, mais le dernier paramètre symbolique ne devrait rien avoir suivi sur la même ligne.