DB2存储过程DISPLAYTRANS报SQLCODE=-203错误,求排查解决
问题排查与解决
错误原因
SQLCODE=-203、SQLSTATE=42702的错误是列引用歧义导致的:你的存储过程输入参数名transNo和sales表的transNo列名完全相同,在WHERE s.transNo = transNo这一行中,DB2无法明确判断transNo指的是输入参数还是sales表的列,因此抛出歧义错误。
解决方法
最直接且稳妥的方式是修改输入参数名,避免与表列名冲突,修改后的存储过程代码如下:
--#SET TERMINATOR @ CREATE PROCEDURE DISPLAYTRANS (IN in_transNo VARCHAR(8)) DYNAMIC RESULT SETS 1 BEGIN BEGIN DECLARE c1 CURSOR WITH RETURN FOR SELECT s.transNo, s.salesDate, p.prodCode, p.description, p.unit, sd.quantity FROM sales s LEFT JOIN salesdetail sd ON s.transNo = sd.transNo LEFT JOIN product p ON sd.prodCode = p.prodCode WHERE s.transNo = in_transNo ORDER BY 1; OPEN c1; END; END@ --#SET TERMINATOR ;
你也可以选择在引用输入参数时添加明确的限定符(比如DB2部分版本支持用:transNo标识参数),但修改参数名的方式更直观,能从根源上避免这类命名冲突问题。
重新创建存储过程后,用TR000039测试即可正常执行。
内容的提问来源于stack exchange,提问作者Faciel
相关产品推荐
相关产品推荐

