使用 SORT 实用程序进行数据操作
Data manipulation with SORT utility
有一个 DB2 table,它有一个 4byte Interger 作为主键。现在我必须将 table 的行数加倍。我的一种方法是,通过将 table 卸载到数据集来操纵键值,并保持所有列的详细信息不变。这样我就可以将行数加倍。
我计划将每个主键与值“-1”相乘,这样我将得到另一行具有相同细节的行,除了具有负值的键。
我在数据操作方面的工作不多。我可以为此使用 SORT 实用程序吗?如果是,那么如何?
有没有参考资料?
这是我的做法。也许这里的其他人有更好的方法来完成您的任务,但我会这样做:
步骤 1 复制
使用 IEBGENER,将原始数据复制到临时文件。请记住,我不得不猜测记录长度和 space 需要
//COPY1 EXEC PGM=IEBGENER
//SYSUT1 DD DSN=XX.FILE.ORIGINAL,
// DISP=SHR
//SYSUT2 DD DSN=&&TEMPFILE,
// DISP=(KEEP,PASS),UNIT=(SYSDA,1),
// LRECL=50,RECFM=FB,
// SPACE=(CYL,(25,10),RLSE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
之后,编写将更改所有键值的 DFSORT 步骤。我假设此密钥将首先出现在您的文件中,并且它是 4 个字符。
第 2 步数学
这里我们将获取临时文件并写出一个新文件,其中 key = key * -1
//MULTI EXEC PGM=DFSORT
//SORTIN DD DSN=&&TEMPFILE,
// DISP=SHR
//SORTOUT DD DSN=XX.FILE.MULTI,
// DISP=(,CATLG,DELETE),UNIT=(SYSDA,1),
// LRECL=50,RECFM=FB,
// SPACE=(CYL,(25,10),RLSE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(-1,MUL,1,4,ZD,EDIT=(STTT),SIGNS=('+','-',,))
/*
完成该步骤后,您可以使用 DFSORT 工具将两个文件合并为一个
第 3 步排序
//SORT EXEC PGM=DFSORT
//SORTIN DD DSN=XX.FILE.ORIGINAL,
// DISP=SHR
// DD DSN=XX.FILE.MULTI,
// DISP=SHR
//SORTOUT DD DSN=XX.FILE.FINAL,
// DISP=(,CATLG,DELETE),UNIT=(SYSDA,1),
// LRECL=50,RECFM=FB,
// SPACE=(CYL,(25,10),RLSE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(1,4,ZD,A)
/*
有一个 DB2 table,它有一个 4byte Interger 作为主键。现在我必须将 table 的行数加倍。我的一种方法是,通过将 table 卸载到数据集来操纵键值,并保持所有列的详细信息不变。这样我就可以将行数加倍。 我计划将每个主键与值“-1”相乘,这样我将得到另一行具有相同细节的行,除了具有负值的键。 我在数据操作方面的工作不多。我可以为此使用 SORT 实用程序吗?如果是,那么如何? 有没有参考资料?
这是我的做法。也许这里的其他人有更好的方法来完成您的任务,但我会这样做:
步骤 1 复制
使用 IEBGENER,将原始数据复制到临时文件。请记住,我不得不猜测记录长度和 space 需要
//COPY1 EXEC PGM=IEBGENER
//SYSUT1 DD DSN=XX.FILE.ORIGINAL,
// DISP=SHR
//SYSUT2 DD DSN=&&TEMPFILE,
// DISP=(KEEP,PASS),UNIT=(SYSDA,1),
// LRECL=50,RECFM=FB,
// SPACE=(CYL,(25,10),RLSE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
之后,编写将更改所有键值的 DFSORT 步骤。我假设此密钥将首先出现在您的文件中,并且它是 4 个字符。
第 2 步数学
这里我们将获取临时文件并写出一个新文件,其中 key = key * -1
//MULTI EXEC PGM=DFSORT
//SORTIN DD DSN=&&TEMPFILE,
// DISP=SHR
//SORTOUT DD DSN=XX.FILE.MULTI,
// DISP=(,CATLG,DELETE),UNIT=(SYSDA,1),
// LRECL=50,RECFM=FB,
// SPACE=(CYL,(25,10),RLSE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(-1,MUL,1,4,ZD,EDIT=(STTT),SIGNS=('+','-',,))
/*
完成该步骤后,您可以使用 DFSORT 工具将两个文件合并为一个
第 3 步排序
//SORT EXEC PGM=DFSORT
//SORTIN DD DSN=XX.FILE.ORIGINAL,
// DISP=SHR
// DD DSN=XX.FILE.MULTI,
// DISP=SHR
//SORTOUT DD DSN=XX.FILE.FINAL,
// DISP=(,CATLG,DELETE),UNIT=(SYSDA,1),
// LRECL=50,RECFM=FB,
// SPACE=(CYL,(25,10),RLSE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(1,4,ZD,A)
/*