通过JCL调用DSNTEP2执行DB2存储过程遇SQL错误求助
DB2存储过程调用错误(SQLCODE=-104/-84)解决建议
关于SQLCODE=-104错误
这个错误是SQL语法非法,DB2中调用存储过程必须使用标准的CALL语句,不能直接输入过程名。正确的调用格式为:
- 无参数存储过程:
CALL <模式名>.<存储过程名>() - 带参数存储过程:
CALL <模式名>.<存储过程名>(参数1, 参数2, ...)
关于SQLCODE=-84错误
这个错误表示无法定位指定的存储过程对象,或调用用户无访问权限,按以下步骤排查:
- 确认存储过程的完整限定名:查询
SYSIBM.SYSROUTINES表的ROUTINESCHEMA和ROUTINENAME字段,获取存储过程的模式名和过程名,调用时必须使用模式名.过程名的完整格式(除非当前会话的默认模式与存储过程所属模式一致)。 - 检查执行权限:确保调用存储过程的用户拥有该过程的
EXECUTE权限,可通过以下SQL授权:GRANT EXECUTE ON PROCEDURE <模式名>.<存储过程名> TO <用户名>; - 验证存储过程有效性:查看
SYSIBM.SYSROUTINES表的VALID字段,若值为'N',说明存储过程无效,需重新编译:ALTER PROCEDURE <模式名>.<存储过程名> RECOMPILE; - 检查作业环境:确认JCL中指定的DB2子系统正确,且执行DSNTEP2的作业用户ID具备访问对应DB2对象的权限。
内容的提问来源于stack exchange,提问作者msa4004
相关产品推荐
相关产品推荐

