SQLcode=-302 仅适用于某些用户



在我们的应用程序中,只有一个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_IDOCS.CHECK_ID = OC_CHECK.CHECK_ID具有不匹配的数据类型。也许列相似,但长度、精度或小数位数不完全相同。这也可能导致数据类型转换错误。DB2 因允许您将varcharinteger或其他类型的类型进行比较而臭名昭著。

相关内容