能否在AS400批处理CL程序中使用RUNSQL生成打印假脱机文件?
AS400批处理CL中通过RUNSQL生成打印假脱机文件的方法
RUNSQL本身没有直接的可视化输出重定向选项,但可以通过以下两种方式实现和STRSQL里Shift+F1修改属性后打印相同的效果:
方法一:直接用RUNSQL的OUTPUT(*PRINT)结合OVRPRTF控制假脱机属性
通过OUTPUT(*PRINT)参数让SQL结果输出到默认假脱机文件QSYSPRT,再用OVRPRTF提前修改该假脱机的属性(打印机、份数、格式等),和STRSQL里改属性的逻辑一致。
示例CL代码:
PGM /* 覆盖QSYSPRT假脱机文件属性,指定目标打印机、打印份数等 */ OVRPRTF FILE(QSYSPRT) TOFILE(PRT01) COPIES(2) HOLD(*NO) TEXT('SQL查询结果打印') /* 执行SQL并输出到打印 */ RUNSQL SQL('SELECT * FROM YOURLIB.YOURTABLE') COMMIT(*NONE) OUTPUT(*PRINT) /* 取消假脱机覆盖 */ DLTOVR FILE(QSYSPRT) ENDPGM
方法二:先生成物理文件再转假脱机打印
如果需要对输出格式做更多自定义,可以先把SQL结果存到临时物理文件,再通过复制命令转成假脱机文件。
示例CL代码:
PGM /* 将SQL查询结果写入临时物理文件 */ RUNSQL SQL('SELECT * INTO QTEMP.TMP_SQL_OUT FROM YOURLIB.YOURTABLE') COMMIT(*NONE) /* 覆盖假脱机属性 */ OVRPRTF FILE(QSYSPRT) TOFILE(PRT02) PAGESIZE(66 132) FORMTYPE(*STD) /* 复制临时文件内容到假脱机 */ CPYF FROMFILE(QTEMP.TMP_SQL_OUT) TOFILE(QSYSPRT) MBROPT(*REPLACE) /* 取消覆盖并清理临时文件 */ DLTOVR FILE(QSYSPRT) DLTF FILE(QTEMP.TMP_SQL_OUT) ENDPGM
注意事项
COMMIT(*NONE)根据实际事务需求调整,避免不必要的锁表OVRPRTF的参数可按需修改,比如PAGESIZE、FONT、HOLD等,对应STRSQL里Shift+F1能修改的各项属性- 复杂报表场景可以结合SQLRPGLE和自定义打印文件,但上述两种CL方法足以应对基础打印需求
内容的提问来源于stack exchange,提问作者user2972041
相关产品推荐
相关产品推荐

