SQLcode = -302仅适用于部分用户

时间:2018-05-25 17:02:50

标签: sql db2 settings

在我们的应用程序中,只有一个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事务中调用它。

1 个答案:

答案 0 :(得分:0)

该错误代码通常与不成功的数据类型转换有关。出现这种情况的原因很多,并且没有人认为可以找出你是否有/没有提供具体细节。

说过我的猜测是:

  • 其中一些参数需要以某种方式进行转换,以便将它们与相应的列进行比较。在某些情况下,该转换不能按预期工作,可能是因为特定值超出了列的精度和/或容量......或类似的东西。您应该获取特定的参数值并尝试手动运行查询。

  • 对于某些情况(用户),加入条件OCS.TEMPLATE_ID = OC_CHECK.TEMPLATE_IDOCS.CHECK_ID = OC_CHECK.CHECK_ID可能具有不匹配的数据类型。可能列相似但长度,精度或比例不完全相同。这也可能导致数据类型转换错误。 DB2是允许您将varcharinteger或其他类型进行比较的原因。