在我们的应用程序中,只有一个sql查询仅为某些用户返回sqlerror = -302。当我使用此查询调用函数时,它工作正常,对于其他一些用户也可以正常工作。只有某些用户遇到此查询的问题。 对同一模式中其他表的查询工作正常,我还检查了其他表的授权,并且此查询中使用的表都相同,但仍然查询对某些用户失败。 有人早些时候遇到过这种问题吗?如果您能找到问题的根本原因,请告诉我。
SELECT OCS.OPERATOR_ID, OCS.CHECK_ID, OCS.TEMPLATE_ID, OCS.START_DATE,
OCS.COMPLETE_DATE, OCS.STATUS, OCS.APPROVER_ID
FROM OC_STATUS AS OCS, OC_CHECK
WHERE OCS.OPERATOR_ID = [Param.1]
AND OCS.OPERATOR_TYPE = [Param.2]
AND OC_CHECK.CHECK_NAME = [Param.3]
AND OC_CHECK.WORKSTATION = [Param.4]
AND OCS.CHECK_ID = OC_CHECK.CHECK_ID
AND OCS.TEMPLATE_ID = OC_CHECK.TEMPLATE_ID
此查询在DB2上执行,我们从Java事务中调用它。
答案 0 :(得分:0)
该错误代码通常与不成功的数据类型转换有关。出现这种情况的原因很多,并且没有人认为可以找出你是否有/没有提供具体细节。
说过我的猜测是:
其中一些参数需要以某种方式进行转换,以便将它们与相应的列进行比较。在某些情况下,该转换不能按预期工作,可能是因为特定值超出了列的精度和/或容量......或类似的东西。您应该获取特定的参数值并尝试手动运行查询。
对于某些情况(用户),加入条件OCS.TEMPLATE_ID = OC_CHECK.TEMPLATE_ID
或OCS.CHECK_ID = OC_CHECK.CHECK_ID
可能具有不匹配的数据类型。可能列相似但长度,精度或比例不完全相同。这也可能导致数据类型转换错误。 DB2是允许您将varchar
与integer
或其他类型进行比较的原因。