首先,我是任何与大型机相关的东西的初学者。
我在工作中有一项培训任务,用SORT在两个文件中找到匹配的密钥。我把这个代码提交给了我的导师,在这里进行了伪编码,因为我还不能从家里访问系统,而且在离开前没有想过复制它:
//STEP01 EXEC SORT
//SORTIN DD DSN=file1
// DD DSN=file2
//SORTXSUM DD DSN=output file
//SORTOUT don't need this data anywhere specific so just tossing at spool
//SYSIN DD *
SORT FIELDS=(1,22,CH,A)
SUM FIELDS=NONE,XSUM
/*
当我插入几个随机的顺序文件时,输出正是我所期望的。然而,我的导师说这不起作用。他的英语有点不好,我很少能理解他重复的前几次在说什么
再加上他提到JOINKEYS(当然是在迅速离职之前),我觉得他只是想(需要吗?)用不同的方式来表达,而且表达得很差。
不管怎样,有人能告诉我我写的代码是否糟糕,并解释为什么它显然没有达到使用JOINKEYS的方法吗?
以下是可以满足的要求:
取两个未排序的数据集;在22字节的密钥上匹配它们;将所有数据输出到两个文件中的一个。如果键重复,请选择匹配组的一条记录,以您方便的为准,并且不能保证在后续运行中重新创建所选内容,并将其写入输出文件;而是将未写入第一文件的所有记录写入第二文件。
如果这是一个要求,那么你就是赢家,因为它会比同等的JOINKEYS
表现得更好。
该解决方案也可以通过几种方式进行修改。SORT语句上有OPTION EQUALS
或EQUALS
时,它将始终是将保留的相等键的第一个记录。
为了更灵活地保留什么,可以使用DUPKEYS
而不是SUM。
如果SUM或DUPKEYS可以满足需求,那么使用它们比使用JOINKEYS更有效。
如果数据已经按顺序排列,但其他方面的要求相同,那么这不是一个好方法。您可以尝试合并来代替SORT,并使用SORTIN01来代替SORTIN。
如果使用DFSORT而不是SyncSORT,则可以使用ICETOOL的SELECT
运算符来完成XSUM和DUPKEYS所能完成的所有操作(以及更多操作)。
如果你正在做超出SUM和DUPKEYS所能做的事情,你需要JOINKEYS。
例如,如果数据已经按顺序排列,则应该在JOINKEYS上为该输入指定SORTED。
在大型机上,资源由客户端支付。因此,我们的目标是避免挥霍。如果有一种方法使用更少的资源,我们就选择了它。
在不知道您的确切需求的情况下,无法判断您的解决方案是否是最佳的:-)