IDCAMS LASTCC and MAXCC

本文详细介绍了IBM大型机环境下IDCAMS控制卡中的LASTCC和MAXCC两个条件码的作用与使用方法。LASTCC记录上一条命令的状态码,而MAXCC则保存所有先前命令状态码的最大值。文章通过示例展示了如何设置这两个变量,并解释了它们的有效值范围及其含义。

What’s LASTCC and MAXCC?

They are IDCAMS return codes, (or condition codes); they can only be used in IDCAMS control card.
-  LASTCC stores the condition code for the previous command.
-  MAXCC stores the maximum code returned by all previous commands.
-  Both LASTCC and MAXCC contain zero by default at the start of IDCAMS execution. so the "set MAXCC=8" command in one JCL step will not affect the MAXCC value at the beginning next JCL step.


Take an example:
//TESTIDCC JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*-----------------------------------------------------------------
//STEP01   EXEC PGM=IDCAMS
//SYSOUT   DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSIN  DD   *                                                         
  SET MAXCC = 2
/*
//*-----------------------------------------------------------------
//STEP02   EXEC PGM=IDCAMS
//SYSOUT   DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSIN  DD   *                                                         
  IF MAXCC = 2 THEN    -
     ALLOCATE DATASET('<UID>.TEST.DATA.MAXCC') -
         LRECL(80) -
        RECFM(F B) -
        BLKSIZE(800) -
        SPACE(1,1) CYL
/*

In this case <UID>.TEST.DATA.MAXCC will NOT be created.


What’s valid values for LASTCC and MAXCC?

LASTCC and MAXCC can be set to any value between 0-16;, following are typical values:
- 0 : command executed with no errors
- 4 : warning - execution may go successful
- 8 : serious error - execution may fail
- 12 : serious error - execution impossible
- 16 : fatal error - job step terminates

How to change LASTCC and MAXCC value?

IDCAMS command “set MAXCC/LASTCC=value”
- Setting MAXCC has no effect on LASTCC.
- Setting LASTCC changes the value of MAXCC, if LASTCC is set to a value larger than MAXCC.


根据您的要求,我将提供一个完整的JCL流,使用不同的IBM工具(如ICETOOL、IDCAMS等)来实现所有步骤。以下是详细的实现方案: ```jcl //FORM52J JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),REGION=0M //* //* 步骤1: 使用UTILITY(IEBGENER)构造初始文件 FORM52.TEST.D2Q1 //* //STEP1 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY //SYSUT1 DD * 001ZHANGSAN20220101 002LISI 20220115 003WANGWU 20220201 004ZHAOLIU 20220215 005QIANQI 20220301 006SUNBA 20220315 007ZHOUJIU 20220401 008WUSHI 20220415 //SYSUT2 DD DSN=FORM52.TEST.D2Q1, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1),RLSE), // DCB=(RECFM=VB,LRECL=1004,BLKSIZE=0) //* //* 步骤2: 使用三种不同的UTILITY复制三份临时文件 //* 2a. 使用IEBGENER复制第一份 //* //STEP2A EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY //SYSUT1 DD DSN=FORM52.TEST.D2Q1,DISP=SHR //SYSUT2 DD DSN=&&TEMP1, // DISP=(NEW,PASS,DELETE), // SPACE=(TRK,(1,1),RLSE), // DCB=(RECFM=VB,LRECL=1004,BLKSIZE=0) //* //* 2b. 使用IDCAMS REPRO复制第二份 //* //STEP2B EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=FORM52.TEST.D2Q1,DISP=SHR //SYSUT2 DD DSN=&&TEMP2, // DISP=(NEW,PASS,DELETE), // SPACE=(TRK,(1,1),RLSE), // DCB=(RECFM=VB,LRECL=1004,BLKSIZE=0) //SYSIN DD * REPRO INFILE(SYSUT1) OUTFILE(SYSUT2) //* //* 2c. 使用DFSORT复制第三份 //* //STEP2C EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD DSN=FORM52.TEST.D2Q1,DISP=SHR //SORTOUT DD DSN=&&TEMP3, // DISP=(NEW,PASS,DELETE), // SPACE=(TRK,(1,1),RLSE), // DCB=(RECFM=VB,LRECL=1004,BLKSIZE=0) //SYSIN DD * SORT FIELDS=COPY //* //* 步骤3: 使用DFSORT MERGE三个临时文件 //* //STEP3 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN01 DD DSN=&&TEMP1,DISP=SHR //SORTIN02 DD DSN=&&TEMP2,DISP=SHR //SORTIN03 DD DSN=&&TEMP3,DISP=SHR //SORTOUT DD DSN=&&MERGED, // DISP=(NEW,PASS,DELETE), // SPACE=(TRK,(1,1),RLSE), // DCB=(RECFM=VB,LRECL=1004,BLKSIZE=0) //SYSIN DD * MERGE FIELDS=(1,3,CH,A) //* //* 步骤4: 使用DFSORT去除重复记录(基于ID) //* //STEP4 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD DSN=&&MERGED,DISP=SHR //SORTOUT DD DSN=FORM52.TEST.D2Q2, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1),RLSE), // DCB=(RECFM=VB,LRECL=1004,BLKSIZE=0) //SYSIN DD * SORT FIELDS=(1,3,CH,A),EQUALS SUM FIELDS=NONE //* //* 步骤5: 生成只包含ID和姓名的新文件(FORM52.TEST.D2Q3) //* //STEP5 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD DSN=FORM52.TEST.D2Q2,DISP=SHR //SORTOUT DD DSN=FORM52.TEST.D2Q3, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1),RLSE), // DCB=(RECFM=VB,LRECL=1004,BLKSIZE=0) //SYSIN DD * OUTREC FIELDS=(1,3,4,8) //* //* 步骤6: 提取特定ID的记录(示例ID: 003)到定长文件 //* //STEP6 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD DSN=FORM52.TEST.D2Q2,DISP=SHR //SORTOUT DD DSN=FORM52.TEST.D2Q4, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1),RLSE), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0) //SYSIN DD * INCLUDE COND=(1,3,CH,EQ,C'003') OUTREC FIELDS=(1,3,4,8,80X) /* ``` 说明: 1. 步骤1:使用IEBGENER创建初始变长文件(VB,LRECL=1004),包含学员ID(3字节)、姓名(8字节)和入职日期(8字节)。 2. 步骤2:使用三种不同工具复制文件: · IEBGENER · IDCAMS REPRO · DFSORT COPY 3. 步骤3:使用DFSORT MERGE合并三个临时文件。 4. 步骤4:使用DFSORT去除重复记录(基于前3字节的ID),生成FORM52.TEST.D2Q2。 5. 步骤5:使用DFSORT的OUTREC功能,只保留ID和姓名(前11字节),生成FORM52.TEST.D2Q3。 6. 步骤6:使用DFSORT的INCLUDE条件选择特定ID(示例为003),并生成定长80字节的文件(用空格填充剩余部分)。 注意事项: · 所有临时文件使用&&前缀,在作业步之间传递。 · 实际使用时,请根据实际数据调整字段位置和长度。 · 步骤6中的ID条件(003)需要替换为实际要筛选的ID。 · 确保所有数据集名称符合您的系统命名规范。 此流完整实现了所有要求,并在一个作业中完成。解析一下代码的含义
最新发布
09-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值