【问题标题】:SQLcode=-302 for some users onlySQLcode=-302 仅适用于某些用户
【发布时间】:2018-05-31 05:35:37
【问题描述】:

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

【问题讨论】:

  • 请用您正在使用的特定数据库标记这个问题。真的很有必要。
  • 另外,查询是什么。我什么都看不到。
  • 什么软件?怎么会有人在不知道的情况下在这里帮助你? 一定是放假的时间
  • 昨天问了一个类似的问题stackoverflow.com/questions/50517651/… 尝试将您的参数显式转换为正确的数据类型,例如ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/…
  • 另外,请使用现代的join 子句。现在已经不是 90 年代初了。

标签: sql db2 settings


【解决方案1】:

该错误代码通常与不成功的数据类型转换有关。发生这种情况的原因有很多,如果您没有/提供具体细节,请不要认为有可能找出答案。

话虽如此,我的猜测是:

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

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

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2018-11-09
    • 2012-10-30
    相关资源
    最近更新 更多