如何解决Syncsort OUTFIL TOTAL引发的"NO KEYWORDS"错误?
问题分析与解决方法
报错原因
1. 语法格式错误
你的OUTFIL TRAILER1语句存在语法问题:
- 文本常量未用
C标识,比如15'='应该写成15C'=',Syncsort无法识别无标识的常量写法。 - 换行和逗号的位置不符合语法要求,导致控制语句被拆分后无法识别关键字,触发
WER275A错误。
2. 列位置引用错误
TOT参数中使用的19,15,ZD是原始输入的列位置,但经过SUM和OUTREC的重新排版后,OUTFIL处理的是OUTREC输出后的记录,原始列位置已经失效,必须引用OUTREC处理后的列位置。
3. 全局总计的逻辑缺失
原SUM FIELDS是按1,8,CH分组求和,要得到全局总计,需要对分组后的汇总结果再次求和,直接用TOT无法基于原始数据计算全局总和。
正确的Syncsort脚本
SORT FIELDS=(1,8,CH,A) * 分组求和,保留原始求和字段用于后续全局总计计算 SUM FIELDS=(19,15,ZD,35,15,ZD) * 输出排版,新增临时字段存储分组后的数值(用于全局求和) OUTREC FIELDS=(19:1,8, 34:19,11,ZD,EDIT=(III,III,III.TT), 51:35,15,ZD,EDIT=(III,III,III), * 临时存储未编辑的分组求和值,放在输出记录末尾(不显示) 60:19,15,ZD, 75:35,15,ZD) * 处理输出并添加总计行 OUTFIL REMOVECC, TRAILER1=(/, 33:15C'=',51:11C'=',/, 33:11C'===============',51:8C'======',/, 34:TOT=(60,15,ZD,EDIT=(III,III,III.TT)), 51:TOT=(75,15,ZD,EDIT=(III,III,III)))
脚本说明
- OUTREC新增临时字段:在输出记录末尾添加未编辑的分组求和数值(列60-74、75-89),这些字段不会显示在最终输出中,仅用于OUTFIL计算全局总计。
- OUTFIL TRAILER1语法修正:
- 用
C'='明确标识字符常量,符合Syncsort语法要求。 - 调整换行和逗号位置,确保控制语句格式正确。
- 用
- 全局总计计算:TOT参数引用OUTREC新增的临时字段(60,15,ZD和75,15,ZD),对分组后的求和结果再次求和,得到全局总计。
内容的提问来源于stack exchange,提问作者user8711867
相关产品推荐
相关产品推荐

