在我们的应用程序中,只有一个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 事务调用它。
该错误代码通常与不成功的数据类型转换有关。发生这种情况的原因有很多,并且认为如果您没有/提供详细信息,则无法找出答案。
话虽如此,我的猜测是:
-
其中一些参数需要以某种方式转换,以便将它们与相应的列进行比较。在某些情况下,该转换无法按预期工作,可能是因为特定值超过了列的精度和/或容量...或类似的东西。您应该获取特定的参数值,并尝试手动运行查询。
-
对于某些情况(用户(,联接条件可能
OCS.TEMPLATE_ID = OC_CHECK.TEMPLATE_ID
或OCS.CHECK_ID = OC_CHECK.CHECK_ID
具有不匹配的数据类型。也许列相似,但长度、精度或小数位数不完全相同。这也可能导致数据类型转换错误。DB2 因允许您将varchar
与integer
或其他类型的类型进行比较而臭名昭著。