通过ACS调用IBM i外部存储过程时LDA为空的问题咨询
IBM i ACS调用外部存储过程的LDA问题解答
1. 是否可以查看ACS作业的LDA?
可以查看ACS对应的SQL作业的LDA,操作方式如下:
- ACS的Run SQL Scripts会话对应IBM i上的作业通常是
QZDASOINIT或QZDASSIN前缀的作业,可通过WRKACTJOB命令筛选用户或作业名找到目标作业。 - 查看LDA的两种方式:
- 选中目标作业后,输入选项
5(显示作业属性),再选择菜单中的10(显示作业的LDA)。 - 直接执行命令:
替换括号内的信息为目标作业的实际标识即可。DSPJOBLDA JOB(作业名/用户名/作业编号)
- 选中目标作业后,输入选项
- 注意:ACS启动的SQL作业默认LDA为空,这正是你调用存储过程时获取不到LDA的核心原因。
2. 如何在ACS调用时传递LDA?
针对ACS作业默认无LDA的情况,提供三种可行方案:
方案1:改造存储过程,弃用LDA传递参数(推荐的现代化方案)
将原本依赖LDA的参数改为存储过程的输入参数,直接在SQL调用时传入,底层程序改为读取输入参数而非LDA:
- SQL调用示例:
CALL SAGE_STATUS_PROC('SAGE运行环境参数'); - 优点:摆脱对LDA这种传统绿屏机制的依赖,更符合SQL存储过程的设计规范,利于系统现代化改造。
方案2:先调用存储过程设置LDA
创建CL程序封装CHGLDA命令,注册为存储过程后,先执行设置LDA的操作,再调用Sage状态存储过程:
- 示例CL程序(SETLDA):
PGM PARM(&LDADATA) DCL VAR(&LDADATA) TYPE(*CHAR) LEN(1024) CHGLDA LDA(&LDADATA) ENDPGM - 将该CL程序注册为存储过程
SET_LDA_PROC后,SQL脚本中先执行:CALL SET_LDA_PROC('你的LDA内容'); - 再调用Sage状态的存储过程,此时作业LDA已被设置。
方案3:用QCMDEXC直接执行CHGLDA命令
在SQL脚本中通过QSYS2.QCMDEXC执行CHGLDA命令设置LDA:
- SQL执行示例:
CALL QSYS2.QCMDEXC('CHGLDA LDA(''你的LDA内容'')'); - 注意:需确保执行SQL的用户拥有
CHGLDA命令的权限,且LDA内容长度不超过1024字节。
内容的提问来源于stack exchange,提问作者Russ
相关产品推荐
相关产品推荐

