2011-08-09 81 views
4

我試圖創建和刪除數據集數據集中的名稱JCL符號是這樣的:通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) 

的問題是,我不能使用JCL流水線內的符號(SYSIN DD *)。 我不能確定數據集是否已經存在,所以我不能只使用DISP =(MOD,DELETE,DELETE)。 是否有另一種方法來刪除數據集?

回答

7

JCL不支持嵌入式數據中符號替換爲你已經發現了......

以下應爲你工作:

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

添加SPACE參數。如果該數據集不存在,則會因爲配置而創建該數據組。然後 它將在步驟完成時刪除。淨結果是,在此步驟之後,指定的數據集將不存在。

,我看到的唯一真正的問題是:

// SET DATE=20110809 

你給的日期是8個字符長(最大預選賽長度),但不與 開頭字母或國民性(它開始一個數字)。這將導致無效的 數據集名稱。如果您只是爲其添加一個字母前綴,那麼數據集DATE限定符將變得太長。解決此問題的常用方法是使用Julian日期,如:2011221.在Julian日期前加 alpah或國家字符,如D2011221。 所以你的SET指令將成爲類似:

// SET DATE=D2011221 

而且都應該工作了。

+0

謝謝! 它並沒有真正將JCL符號傳遞給instream,但它真的適合我的需求:) – user823959

+0

我們可以使用DISP = OLD嗎?我從來沒有用IEFBR14這個,但猜測它是否有效。而且......如果我們想要引用已經引用日期的數據集,這個Julian日期有點混亂,我想。只有使用YYMMDD格式,我們才能使用實際的日期。只是一個建議! –

+1

@Raja Reddy。不,你不應該在這裏使用'DISP = OLD'。如果數據集不存在,則該步驟將失敗(未找到數據集)。如果數據集還不存在,那麼'DISP = MOD'會創建數據集 - 然後就可以刪除它!看起來很愚蠢 - 但這是它的工作方式。另一方面,如果數據集已經存在,'DISP = MOD'將使用現有數據集 - 然後將其刪除。淨結果是數據集在步驟完成後不會存在。 – NealB

5

從z/OS 2.1(2013年9月30日發佈)開始,通過將SYMBOLS關鍵字添加到DD語句中,可以在JES2插播數據中使用符號。可能的值爲:

  • 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' 
/* 

有關詳細信息,包括語法配置,其中符號替換日誌推移,請參見:

+1

在z/OS上的巨大發展,感謝您的參與。 – user823959