2009-04-11 10 views
3

Ich bin ein wenig verwirrt darüber, wie man eine symbolische Variable in JCL für eine Aufgabe, die ich in meiner COBOL-Klasse mache, erstellt.Symbolische JCL Verwirrung

Zum Beispiel soll ich "einen symbolischen Parameter für die PARM-Option angeben und TEST und APOST als Standard angeben."

Wie kann ich die Option "PARM" als symbolischen Parameter festlegen?

EDIT: Verzeihen Sie die Aufsicht; Es scheint, dass ich vergessen habe zu erwähnen, in welchem ​​Betriebssystem ich arbeite. Ich schreibe diese JCL-Datei in z/OS.

Vielen Dank im Voraus!

EDIT:

@avisser:

Also, was Sie sagen, ist, dass ich es nur nennen kann "& PARM = 'TEST, APOST'" und, wenn ich diesen Parameter ändern wollte Wenn ich diesen Proc mit einer anderen JCL-Anweisung ausführen, können die aufgelisteten Parms von der aufrufenden JCL geändert werden?

EDIT:

@avisser:

Ja, sorry, ich muß wirklich auf seinem präzisen arbeiten ... In meinem COBOL JCL, ich rufe die COBOL-Compiler (IGYCRCTL), die Verbindung Editor (HEWL) und ein Programm holen (EXEC PGM =).

EDIT:

Vielleicht würde es helfen, zu sehen, was meine Ausgabe ist. Ich schätze wirklich all diejenigen, die bisher versucht haben zu helfen.

Ausgang:

------ JES2 JOB STATISTIK ------

 37 CARDS READ                            

     61 SYSOUT PRINT RECORDS                         

     0 SYSOUT PUNCH RECORDS                         

     3 SYSOUT SPOOL KBYTES                         

    0.00 MINUTES EXECUTION TIME                         

!! ENDE VON JES SPOOL DATEI !! 1 // KC03CEFA JOB '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, UNIT = DISK, SPACE = (TRK, (3,3)),
// & DISP = (NEW, 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 EINHEIT = DISK, LEERLAUF = (CYL, (1,1))
9 // SYSUT4 DD EINHEIT = DISK, LEERLAUF = (CYL, (1,1))
10 // SYSUT5 DD UNIT = DISK, LEERLAUF = (CYL, (1,1))
11 // SYSUT6 DD EINHEIT = DISK, LEERLAUF = (CYL, (1,1))
12 // SYSUT7 DD EINHEIT = DISK, LEERRAUM = (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 = (OLD, DELET E)
16 // SYSLMOD DD DSN = & & TEMPLIB (PGM6),
// SPACE = (1024, (50,20,1)), UNIT = DISK,
// DISP = (NEW, CATLG DELETE),
17 // SYSPRINT DD SYSOUT = *
18 // PRINTER 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 // PRINTER DD SYSOUT = *
25 // PRODUCTS DD DSN = KC02322.CSCI465.SP09 (DATA1), DISP = SHR
26 // SYSIN DD *
!! ENDE VON JES SPOOL DATEI !! STMT NR. MESSAGE 2 IEFC630I UNIDENTIFIED KEYWORD & REGION 2 IEFC630I UNIDENTIFIED KEYWORD & PARM 4 IEFC630I UNIDENTIFIED KEYWORD & DSN 4 IEFC630I UNIDENTIFIED KEYWORD & DISP 13 IEFC630I UNIDENTIFIED KEYWORD & COND 13 IEFC630I UNIDENTIFIED KEYWORD & reagion 13 IEFC630I UNIDENTIFIED KEYWORD & PARM 15 IEFC630I UNIDENTIFIED KEYWORD & DSN 15 IEFC630I NICHT IDENTIFIZIERTES KEYWORD & DISP 20 IEFC630I UNIDENTI FIED KEYWORD & PARM 22 IEFC605I Unbekannter Operationsbereich 23 IEFC605I Unbekannter Operationsbereich !! ENDE VON JES SPOOL DATEI !!

+0

JCL == Jobsteuersprache - es ist ein allgemeiner Begriff. Sie müssen angeben, welches Betriebssystem Sie fragen, –

Antwort

5

symbolische Parameter sind Namen, denen ein Et-Zeichen vorangestellt ist. Wenn sie in einer JCL-Anweisung verwendet werden, werden sie zur Laufzeit in den bereitgestellten Wert konvertiert. Eine Möglichkeit, sie zu erstellen (auf z/OS) wird unter Verwendung eines

// SET name = value

Erklärung. Wenn Sie ein PARM verwenden, sollten Sie Ihr Programm so entwerfen, dass es mit einem Programm arbeiten kann. Vielleicht ist die Aufgabe, wie man das tut (Hinweis: Verbindungsabschnitt). Oder ist JCL ein Teil Ihrer COBOL-Klasse?

TEST und APOST sehen für mich wie Compiler-Direktiven aus. Ich weiß nicht, ob Sie sie in Ihrem Programm angeben können, an meinem Arbeitsplatz liefern wir sie nur beim Aufruf des Compilers.

EDIT:

Ok das ist etwas ungewöhnlich für mich, wie wir neigen dazu, unsere Programme zu kompilieren und auszuführen in separaten JCL-Streams. Aber wie auch immer.

Unter Ihrer zweiten Aussage:

2 //STEP01 EXEC PGM=IGYCRCTL,&REGION=248K, 
    // &PARM='TEST,APOST' 

REGION und PARM sind Positionsparameter so genannten und sie sind Schlüsselwörter, nicht wirklich gemeint als symbolischen Namen dargestellt werden, obwohl Sie so zu tun frei sind (dies wird die "UNIDENTIFIED KEYWORD" Nachrichten erklären.
Die allgemeine Verwendung - sofern zutreffend - besteht darin, symbolische Namen für die Operanden solcher Parameter bereitzustellen. Und natürlich müssen Sie zunächst für sie einen Wert definieren, z:

// SET OPTIONS='TEST,APOST' 
    //STEP01 EXEC PGM=IGYCRCTL,REGION=248K, 
    // PARM=&OPTIONS 
+0

Wow. +1, nur um zu wissen, was JCL ist. –

+0

Ich habe herausgefunden, es (und es ist ein bisschen anders als das, was Sie mir gezeigt), aber Ihr Rat war sehr hilfreich. Vielen Dank. – Enyalius

+0

Wie bereits erwähnt, ist SET nur eine Möglichkeit, einen Wert für einen Parameter zu definieren. Es ist ein anderes, sie beim Prozeduraufruf zur Verfügung zu stellen, aber ich dachte SET wäre einfacher mit zu beginnen. –

3

Ok, ich einige Graben tat, und mit der Führung, die avisser mir gab, konnte ich herausfinden, was ich zu tun hatte. Also, für zukünftige Referenz für jeden, der diese Frage (oder eine ähnliche) haben könnte, hier ist was ich herausgefunden habe:

Schritt 1: Erstellen Sie eine "PROC" mit den Variablen, die Sie verwenden werden.

ex. Ich wollte Variablen für den „PARM“ in meinen COBOL-Compiler verwenden, um die Standardwerte von „TEST“ und „APOST“ hatten, also schrieb ich so etwas wie:

//PROC1 PROC CPARM='TEST,APOST', 

Schritt 2: diese neu definierten symbolischen Parameter verwenden in Ihrem tatsächlichen JCL-Schritt. Das Zeichen "&" zeigt, dass das, was ihm folgt, ein symbolischer Parameter ist.

ex. Früher habe ich den oben genannten „CPARM“ für meine COBOL Compilierungsschritt:

//COB EXEC PGM=IGYCRCTL,REGION=&CREGION, 
//    PARM='&CPARM' 

Schritt 3: Lassen Sie die „PROC“ mit einer „PEND“ Anweisung nach dem tatsächlichen Schritt.

ex. Nachdem ich alle meine Variablen aufgelistet habe und alle Schritte zum Kompilieren aufgelistet habe (Name des Compilers, wo der Compiler gefunden werden kann, und wie direkt vor der PEND-Anweisung die SYSUT1-SYSUT7-Anweisungen zu sehen sind), geben Sie Ihr PEND-Schlüsselwort ein:

Schritt 4: Fügen Sie Ihrer Quelldatei weitere JCL-Schritte und/oder Code hinzu, und Sie sind fertig!

Hinweise:

-Sie können in einer einzigen JCL-Datei mehr als eine PROC-Anweisung haben. Ich hatte drei: einen für die COBOL-Kompilierung, einen für den Linkeditor und einen für den Programmabruf. Ich habe auch COBOL-Code in der gleichen Datei, in der meine PROC-Anweisungen sind.

-Dies fand auf einem IBM Mainframe unter z/OS statt.

-Above, es ist ersichtlich, dass meine "CPARM" Variable auf den Standardwert von "TEST, APOST" gesetzt ist. Es ist möglich, dass eine Variable standardmäßig null ist, indem Sie einfach das Feld leer lassen (z. B. CPARM =,).

-Sie haben vielleicht bemerkt, dass nach der CPARM-Definition ein Komma vorhanden ist; Das liegt daran, dass ich mehr Variablen dahinter habe. Bitte beachten Sie, dass dem letzten symbolischen Parameter, den Sie für einen bestimmten PROC erstellen, nichts folgen sollte (dh kein Komma). Sie können natürlich eine Kommentarzeile (// *), einen anderen PROC- oder tatsächlichen Code hinterher einfügen, aber dem letzten symbolischen Parameter sollte nichts folgen, das in derselben Zeile steht.