如何通过 jcl 获取当前的 GDG 版本

Posted

技术标签:

【中文标题】如何通过 jcl 获取当前的 GDG 版本【英文标题】:how to get current GDG version through jcl 【发布时间】:2014-08-06 07:04:10 【问题描述】:

我有下面的代码将 gdg 的属性写入 PS 文件。

//STEP10  EXEC PGM=IDCAMS                              
//DD1       DD DSN='GDGBASE(0)',DISP=SHR  
//SYSPRINT  DD DSN=GDG.VERSION.PS,           
//             DISP=(NEW,CATLG,DELETE),                
//             UNIT=WORK,AVGREC=K,                     
//             SPACE=(108,(5,5),RLSE),                 
//             DCB=(BUFNO=10,RECFM=FB,LRECL=108)       
//SYSIN     DD *                                       
 PRINT INFILE(DD1) COUNT(0) CHAR                       
/*   

但我只需要将 GDG 的最新版本名称写入 PS 文件即可。

【问题讨论】:

你的意思是世代,而不是版本。请查阅您的 JCL 参考以找出不同之处。您可以完成整个职业生涯而无需使用版本。您可以使用 LISTCAT 并从其输出中获取数据集名称。你需要它做什么? 【参考方案1】:

我认为你不能使用纯 JCL 来做到这一点。作为开始的建议,这里有一个简短的 REXX 和一些 JCL - 它并不完美,但您可以对其进行调整以满足您的特定需求。

第 1 部分:一个简短的 REXX 脚本,用于显示已分配文件的 DSN:

/* REXX find DSN for DD */ 
arg mydd                     
x= LISTDSI(mydd file)        
say sysdsname                

第 2 部分:JCL 使用批处理 TSO 调用它:

//FINDDSN EXEC PGM=IKJEFT01,PARM='DSNFIND MYFILE'    
//MYFILE   DD  DSN=MY.GDG.FILE(+0),DISP=SHR    
//SYSEXEC  DD  DSN=PDS.CONTAINING.REXX,DISP=SHR          
//SYSTSPRT DD  SYSOUT=*                                
//SYSTSIN  DD  DUMMY

其中DSNFIND 是给定 REXX 过程的成员名。

SYSTSPRT 中的输出是:

MY.GDG.FILE.G0338V00
READY                       
END                     

我还没有找到一种快速的方法来抑制 READYEND - 但你可以代替 SAY,例如使用 EXECIO 写入另一个文件 - READYEND 仍将转到 SYSTSPRT

【讨论】:

感谢您的宝贵回复,但我收到以下错误。 CLIST 或 REXX EXEC 的第 1 阶段处理异常结束 +​​ 异常终止代码:S913 原因代码:0038 检查您的工作日志 - 这可能是某些数据集的访问权限不足的问题。 检查您的作业日志中的 ICH408I 消息,指示 RACF 阻止访问的资源。

以上是关于如何通过 jcl 获取当前的 GDG 版本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jcl比较多个文件

如何通过 Java Web 应用在 IBM z OS 中提交 JCL?

仅获取记录 nr。 x 通过在 JCL 中使用 dfsort

如何通过 JCL 将参数传递给 REXX 程序

如何通过 DFC 代码获取当前版本标签号?

如何通过获取当前分支中的版本来自动解决 Git 冲突?