3

1 つのカタログ プロシージャを実行する JCL があります。カタログ手順では、1 つの COBOL-DB2 pgm が実行されています。


以下は私のJCLです

//A JOB (@),'CALL DB2',NOTIFY=&SYSUID
//JS010 EXEC TESTPROC

以下は私のTESTPROCです

//TESTPROC
//PS010 EXEC PGM=IKJEFT01,,DYNAMNBR=20
//STEPLIB DD DSN=TEST.LOADLIB,DISP=SHR
//SYSTSPRT DD SYSOUT=*                     
//SYSPRINT DD SYSOUT=*                     
//SYSUDUMP DD SYSOUT=*                     
//SYSTSIN  DD DSN=TEST.PDS(TESTPGM), 
//            DISP=SHR            
//SYSOUT DD SYSOUT=*

以下は私のSYSTINデータです --TESTPGM

DSN SYSTEM(TEST)                    
RUN PROGRAM(TESTPGM) PLAN(TESTPLAN)
END 

私の質問は、SYSTIN データ メンバー TESTPGM で TESTPGM および TESTPLAN の代わりにシンボリック パラメーターを使用できるかということです。

よろしく、サイシャ:)

4

3 に答える 3

4

以下で説明するように、PDS メンバー名を記号値にしてから、PDS 内の各メンバーを別のプログラムを指すように定義することができます。例として JCL を使用します。

//TESTPROC PROC MYPGM=
//PS010 EXEC PGM=IKJEFT01,,DYNAMNBR=20
//STEPLIB DD DSN=TEST.LOADLIB,DISP=SHR
//SYSTSPRT DD SYSOUT=*                     
//SYSPRINT DD SYSOUT=*                     
//SYSUDUMP DD SYSOUT=*                     
//SYSTSIN  DD DSN=TEST.PDS(&MYPGM), 
//            DISP=SHR            
//SYSOUT DD SYSOUT=*

上記の例では、EXEC ステートメントは次のように proc を呼び出します。

//JS010 EXEC TESTPROC,MYPGM=TESTPGM

別のオプションとして、次のように SYSTSIN DD を直接オーバーライドできます。

//A JOB (@),'CALL DB2',NOTIFY=&SYSUID
//JS010 EXEC TESTPROC
//PS010.SYSTSIN DD *
DSN SYSTEM(TEST)                    
RUN PROGRAM(TESTPGM) PLAN(TESTPLAN)
END
/*
//

もう1つの提案...最終的な実装では、

DSN SYSTEM(TEST)

から

RUN PROGRAM(TESTPGM) PLAN(TESTPLAN)
END

その理由は、SYSTEM(TEST) だけでなく、複数の DB2 環境でプログラムを実行したい場合があるからです。これを行うには、別のパラメーター DB2SYS= を追加し、次のように変更するだけです。

//TESTPROC PROC DB2SYS=MYTEST,MYPGM=
...
//SYSTSIN  DD DSN=TEST.PDS(&DB2SYS),DISP=SHR
//         DD DSN=TEST.PDS(&MYPGM),DISP=SHR

ここで、PDS メンバー MYTEST には、DSN SYSTEM(TEST) ステートメントが既にコーディングされています。

于 2011-09-23T13:24:03.923 に答える
2

短い答えはノーです。SYSTSIN DD ステートメントが参照する PDS の制御カードに記号パラメーターがある場合、それら (記号パラメーター) は解決されません。

これを回避する 1 つの方法は、別のプログラムを作成し、PS010 ステップの前にプロシージャ内の別のステップで実行して、パラメーターとテキストを取り込み、一時ファイルに書き込むことです。シンボリック パラメータは、そのプログラムの PARM= で解決されます。

//PS001    EXEC PGM=LOADPARM,PARM='DSN SYSTEM(&DSNSYS)'
//SYSPRINT DD  SYSOUT=*
//OUTPUT01 DD  DISP=(,PASS), 
//             DSN=&&DSNSYS, 
//             AVGREC=U, 
//             LRECL=80,  
//             RECFM=FB, 
//             SPACE=(80,1)
//****

架空のプログラム LOADPARM は、単純にその入力パラメーターを取得して OUTPUT01 に書き込み、右側にブランクを埋め込むように注意します。PS010 では、次のような SYSTSIN があります...

//SYSTSIN  DD  DISP=(OLD,DELETE),DSN=&&DSNSYS
//         DD  DISP=SHR,DSN=TEST.PDS(TESTPGM)

...TESTPGM メンバーは次のようになります...

RUN PROGRAM(TESTPGM) PLAN(TESTPLAN)
END

このように、カタログ式プロシージャーは、アクセスしている DB2 サブシステムを認識しません。その情報は、実行 JCL で DSNSYS シンボリック パラメータを使用して提供されます。

この問題に対処する方法は他にもあります。たとえば、DB2 サブシステムごとに 1 つのメンバーを持つ、共有 PDS 内の既知のメンバーに解決されるシンボリック パラメーターを使用することができます。

于 2011-09-23T12:01:33.013 に答える
0

いいえ、SYSTSIN 内でシンボリック パラメータを使用することはできません。SYSTSIN カードを 2 つに分割して DB2 サブシステムを一般化する代わりに、そのメンバー名のシンボリック パラメータを持つ個別のテスト データカードを維持し、必要に応じて切り替えることを好みます。

ただし、DB2 サブシステムを自動化しても、常に目的の値が得られるとは限りません。とにかく、それは良い努力をしました。

于 2011-09-28T17:46:13.670 に答える