5

データセット名にJCL記号が含まれるデータセットを次のように作成および削除しようとしています。

//    SET DATE=20110809
//* DELETE DATASET
//DEL01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
           DELETE DATASET.TEMP.&DATE                PURGE
           SET MAXCC = 0
//* CREATE DATASET
//STEP01   EXEC PGM=IEFBR14
//DELDD    DD DSN=DATASET.TEMP.&DATE,
//            DISP=(NEW,CATLG,DELETE)

問題は、インストリーム(SYSIN DD *)内でJCLシンボルを使用できないことです。データセットがすでに存在するかどうかわからないため、DISP =(MOD、DELETE、DELETE)を使用することはできません。データセットを削除する別の方法はありますか?

4

2 に答える 2

9

z / OS 2.1(2013年9月30日リリース)以降、ステートメントにSYMBOLSキーワードを追加することにより、JES2インストリーム・データでシンボルを使用することが可能です。DD可能な値は次のとおりです。

  • SYMBOLS=JCLONLY:インストリームデータのJCLシンボルとJESシンボルを置き換えます。

  • SYMBOLS=EXECSYS:ジョブの実行中にシステムで定義されたJCLシンボル、JESシンボル、およびシステムシンボルを置き換えます。

  • SYMBOLS=CNVTSYS: JCL変換中にシステムで定義されたJCLシンボル、JESシンボル、およびシステムシンボルを置き換えます。

シンボルはエクスポートされている必要があります。

[2]の例は次のとおりです。

// EXPORT SYMLIST=(DSN,VOL)
// SET DSN='ABC.DATA',VOL='123456'
//STEP1 EXEC PGM=USERPGM1
//DATA     DD DSN=&DSN,DISP=SHR
//SYSIN    DD *,SYMBOLS=EXECSYS
  SYSTEM=&SYSNAME,DSNAME=&DSN,VOLUME=&VOL
  FUNCTION='&APPL_NAME'
/*

シンボル置換ログの移動先を構成するための構文など、詳細については、以下を参照してください。

于 2013-10-11T13:30:14.340 に答える
8

ご存知のように、JCLはインラインデータ内のシンボル置換をサポートしていません...

以下はあなたのために働くはずです:

//DEL01   EXEC PGM=IEFBR14          
//DELDD    DD DSN=DATASET.TEMP.&DATE, 
//         DISP=(MOD,DELETE,DELETE), 
//         SPACE=(TRK,0)             

SPACEパラメーターを追加します。データセットが存在しない場合は、MOD処理のために作成されます。その後、ステップの完了時に削除されます。最終的な結果として、このステップの後、指定されたデータセットは存在しなくなります。

私が見る唯一の本当の問題は次のとおりです。

//    SET DATE=20110809

指定する日付は8文字の長さ(修飾子の最大長)ですが、アルファベットまたは国別文字(数字で始まる)で始まりません。これにより、データセット名が無効になります。データセットのDATE修飾子は、アルファプレフィックスを追加するだけでは長くなりすぎます。この問題への一般的なアプローチは、2011221のようにユリウス日を使用することです。D2011221のように、アルパまたは国の文字のいずれかでユリウス日を接頭辞として付けます。したがって、SETディレクティブは次のようになります。

//    SET DATE=D2011221

そして、すべてがうまくいくはずです。

于 2011-08-09T17:44:49.587 に答える