JCL中SORT的应用

来源:互联网 发布:数据库基础教程 推荐 编辑:程序博客网 时间:2024/05/16 05:16
JCL code
  ***************************** Top of Data ******************************
  //SORTTEST JOB 'DDS1602',MSGCLASS=S,TIME=1440,NOTIFY=&SYSUID
  //STEP01 EXEC PGM=SORT
  //SYSOUT DD SYSOUT=*,OUTLIM=5000
  //SYSPRINT DD SYSOUT=*,OUTLIM=5000
  //SYSTSPRT DD SYSOUT=*,OUTLIM=5000
  //SYSUDUMP DD DUMMY
  //PLIDUMP DD DUMMY
  //SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,(30),,CONTIG)
  //SORTWK02 DD UNIT=(SYSDA,SEP=SORTWK01),SPACE=(TRK,(30),,CONTIG)
  //SORTWK03 DD UNIT=(SYSDA,SEP=(SORTWK01,SORTWK02)),
  // SPACE=(TRK,(30),,CONTIG)
  //SORTIN DD DSN=DDS1602.XUWEN.DATA,DISP=SHR
  //SORTOUT DD DSN=DDS1602.XUWEN.DATAOUT,DISP=(MOD,CATLG,DELETE),
  // UNIT=SYSDA,SPACE=(TRK,(2,1),RLSE),
  // DCB=(RECFM=FB,LRECL=23,DSORG=PS)
  //SYSIN DD *
   SORT FIELDS=(10,10,CH,A),SKIPREC=1
   OMIT COND=(24,1,CH,EQ,C'F')
   SUM FIELDS=(20,04,ZD)
   OUTREC FIELDS=(10,10,20,4,C'END')
  /*
  //*SKIPREC=1 SKIP THE TOP 1 RECORD
  //*STOPAFT=1 JUST SELECT THE TOP 1 RECORD
  //*OMIT COND=(X,X,PD,LT,0) OMIT THE RECORD WHICH SATISFY THE CONDITION
  //*
  **************************** Bottom of Data ****************************
      
  输入数据:
  ----+----1----+----2----+----3----+
  Number---Name------Qty-Flag
  Number1 Xuwen 1000S
  Number2 Tony Lv 2000S
  Number3 Hanbao Liu3000F
  Number4 Xuwen 0111S
  Number5 Tony Lv 0222F
  Number6 Hanbao Liu0333S
    
  输出:
  ----+----1----+----2---
  Hanbao Liu0333END
  Tony Lv 2000END
  Xuwen 1111END
  
  作业控制语句:
  JOB: 指定作业参数
  EXEC: 指定作业步参数
  SYSOUT DD: 定义输出信息的顺序数据集
  SORTIN DD: 定义输入数据集
  WORTWKdd DD: 定义一系列的排序工作数据集
  SORTOUT DD: 定义排序完的数据的输出数据集
  SYSIN DD: 定义控制信息
  
  控制选项:
  SORT: 指定对数据集进行排序操作
  MERGE: 指定对数据集进行合并操作
  COPY: 指定对数据集进行拷贝操作
  FIELDS: 指定排序键值的信息,格式为
  FIELDS=(起始位置,长度,升降序[,起始位置,长度,升降序]),FORMAT=数据类型
   (起始位置,长度,数据格式,升降序[,起始位置,长度,数据格式,升降序])
  其中位置和长度都是以字节为单位,顺序可选的有 A:升序,D:降序,E:适用用户出口例程序;
  FORMAT=指定键字的类型,可选项有 CH:字符,PD:压缩十进制,BI:二进制,AC:ASCII码型
  
  说明:
  000012 SORT FIELDS=(1,7,CH,A) 从1位到第7位升序排列,降序是D
  000013 OMIT COND=(11,1,CH,EQ,C'A',OR,11,1,CH,EQ,C'B') OMIT忽略掉11位是'A'和'B'的记录
  000014 OUTREC FIELDS=(1,9,C' ',11,6,C' END') 重新组合新得输出数据,取1到9位,第10位替换为space,再取11位到16位,17位开始用' END'替换