Incude年从DSN使用JCL上个月的日期(Incude the year from last m

2019-11-01 07:49发布

我也有类似的“JCL的前一个月,一年的数据集名称”问题的请求。 在回答这个问题使用ALTER语句,它假定日期的知识。 我有JCL到今年追加到DSN,然而在1月,我需要上一年。 我认为这是可能的Syncsort公司或DFSORT的帮助,但我不能与其中任一经历。 任何援助表示赞赏。

这是当前JCL:

//B999999X JOB (80594,XXX),'MAKE DATE',                      
//         CLASS=C,MSGCLASS=C,NOTIFY=&SYSUID                 
//STEP0100 EXEC PGM=EZACFSM1                                 
//SYSOUT   DD SYSOUT=(*,INTRDR)                              
//SYSIN    DD DATA,DLM=@@                                    
//B8025501 JOB (,9999),'TESTING',                            
//         CLASS=A,MSGCLASS=C,MSGLEVEL=(1,1),NOTIFY=&SYSUID  
//STEP01   EXEC PGM=IEFBR14                                  
//FILE01   DD DSN=B999999.TEST.MYFILE.FUEL&YR2,              
//            DISP=(NEW,CATLG,DELETE),                       
//            UNIT=SYSDA,                                    
//            SPACE=(CYL,(10,10),RLSE),                      
//            DCB=(LRECL=80,RECFM=FB,BLKSIZE=0)              
/*                                                           
@@          

Answer 1:

其实, 回答你第一个引用的问题指出:“造成这种情况的最好的解决办法是使用你的作业调度的功能。” 这仍然是最好的答案。 那我展示了如何的东西可以做的目的不是为了暗示我认为这是最好的或最易维护的方法。

你可以用这样做的Rexx或UNIX系统服务 shell脚本,或AWK脚本或Perl中 ,再次构建ALTER语句在后续步骤中被用来命名一个静态命名的数据集以一个包含你想要的日期预选赛。

还有一些其他的技术在这里 。

但是,如果你有一个可用的作业调度包,你真的应该使用其功能。

以上提出的解决方案的实例如下。

REXX程序MKALTR

dsn = Arg(1)                                                  
Parse Value Date('O') With yy '/' mm '/' dd                   
If mm = 1 Then                                                 
  If yy > 0 Then                                              
    yy = yy - 1                                               
  Else                                                        
    yy = 99                                                    
outLine.1 = ' ALTER ' || dsn || ' - '                         
outLine.2 = ' NEWNAME(' || dsn || yy || ')'                   
outLine.0 = 2                                                 
Address TSO 'EXECIO * DISKW OUTPUT01 ( STEM' outLine. 'FINIS )'
Exit 

JCL运行REXX程序MKALTR

//*
// SET &DS=MY.DATASET.NAME
//*
//CATLG    EXEC PGM=IEFBR14                                     
//STDOUT   DD  DISP=(,CATLG),                                   
//             DSN=&DS,                       
//             AVGREC=U,                                        
//             LRECL=80,                                        
//             RECFM=FB,                                        
//             SPACE=(80,(1,1))                                 
//*                                                             
//MKALTER  EXEC PGM=IKJEFT1B,PARM='MKALTR &DS'
//SYSEXEC  DD  DISP=SHR,DSN=dataset.where.rexx.code.resides                  
//SYSTSPRT DD  SYSOUT=*                                         
//SYSPRINT DD  SYSOUT=*                                         
//SYSTSIN  DD  DUMMY                                            
//OUTPUT01 DD  DISP=(,PASS),                                     
//             AVGREC=K,                                        
//             LRECL=80,                                        
//             RECFM=FB,                                        
//             SPACE=(80,(2,1))                                  
//*                                                             
//DOALTER  EXEC PGM=IDCAMS                                      
//SYSIN    DD  DISP=(OLD,DELETE),DSN=*.MKALTER.OUTPUT01         
//SYSPRINT DD  SYSOUT=*                                          
//* 

shell脚本mkaltr

let "mon=`date +'%m'`"     
let "yr=`date +'%y'`"      
if [ $mon -eq 01 ]         
then                       
  let "outyr=$yr-1"        
fi                         
echo \ ALTER $1 -          
echo \ \ NEWNAME\($1$outyr\)

JCL运行shell脚本mkaltr

//*
// SET &DS=MY.DATASET.NAME
//*
//CATLG    EXEC PGM=IEFBR14                         
//STDOUT   DD  DISP=(,CATLG),                       
//             DSN=&DS,          
//             AVGREC=U,                            
//             LRECL=80,                             
//             RECFM=FB,                            
//             SPACE=(80,(1,1))                     
//*                                                 
//MKALTER  EXEC PGM=BPXBATCH,                       
// PARM='SH /path/to/script/mkaltr &DS'    
//STDOUT   DD  DISP=(,PASS),                        
//             AVGREC=U,                            
//             LRECL=80,                            
//             RECFM=FB,                            
//             SPACE=(80,(2,1))                     
//STDERR   DD  SYSOUT=*                             
//*                                                 
//DOALTER  EXEC PGM=IDCAMS                          
//SYSIN    DD  DISP=(OLD,DELETE),DSN=*.MKALTER.STDOUT
//SYSPRINT DD  SYSOUT=*                             
//*     

用awk shell脚本mkaltr

date +"$1 %m %y" | awk '                             
{                                                    
yr = $3                                              
if ( $2 = 1 ) yr -= 1                                
if ( yr > 100 ) yr -= 100                             
printf( " ALTER %s -\n NEWNAME(%s%2d)\n", $1, $1, yr )
}'

JCL运行shell脚本mkaltr

//*
// SET &DS=MY.DATASET.NAME
//*
//CATLG    EXEC PGM=IEFBR14                         
//STDOUT   DD  DISP=(,CATLG),                       
//             DSN=&DS,          
//             AVGREC=U,                            
//             LRECL=80,                            
//             RECFM=FB,                            
//             SPACE=(80,(1,1))                     
//*                                                  
//MKALTER  EXEC PGM=BPXBATCH,                       
// PARM='SH /path/to/script/mkaltr &DS'   
//STDOUT   DD  DISP=(,PASS),                        
//             AVGREC=U,                             
//             LRECL=80,                            
//             RECFM=FB,                            
//             SPACE=(80,(2,1))                     
//STDERR   DD  SYSOUT=*                             
//*                                                  
//DOALTER  EXEC PGM=IDCAMS                          
//SYSIN    DD  DISP=(OLD,DELETE),DSN=*.MKALTER.STDOUT
//SYSPRINT DD  SYSOUT=*                             
//*

Perl程序mkaltr

if ( @ARGV ) {                                                         
  $dsn = shift( @ARGV );                                                
} else {                                                               
  die "dataset name required";                                         
}                                                                      

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
if ($mon == 0) {                                                       
  $year -= 1                                                           
}                                                                      
if ($year >= 100) {                                                    
  $year -= 100;                                                         
}                                                                      
printf (" ALTER %s -\n NEWNAME(%s%2d)\n", $dsn, $dsn, $year); 

JCL运行Perl程序mkaltr

//*
// SET &DS=MY.DATASET.NAME
//*
//CATLG    EXEC PGM=IEFBR14                              
//STDOUT   DD  DISP=(,CATLG),                            
//             DSN=&DS,               
//             AVGREC=U,                                 
//             LRECL=80,                                 
//             RECFM=FB,                                  
//             SPACE=(80,(1,1))                          
//*                                                      
//MKALTER  EXEC PGM=BPXBATCH,                            
// PARM='SH perl /path/to/perl/program/mkaltr &DS'
//STDOUT   DD  DISP=(,PASS),                             
//             AVGREC=U,                                 
//             LRECL=80,                                 
//             RECFM=FB,                                 
//             SPACE=(80,(2,1))                          
//STDERR   DD  SYSOUT=*                                  
//*                                                      
//DOALTER  EXEC PGM=IDCAMS                               
//SYSIN    DD  DISP=(OLD,DELETE),DSN=*.MKALTER.STDOUT    
//SYSPRINT DD  SYSOUT=*                                  
//* 


文章来源: Incude the year from last month's date in the DSN using JCL