【问题标题】:Stored procedure with a cursor when called through hibernate, fails通过休眠调用时带有游标的存储过程失败
【发布时间】:2017-09-29 23:43:05
【问题描述】:

我们在项目中使用 hibernate 作为 ORM 工具。我们有一个场景,我们需要调用一个存储过程。现在这个存储过程在内部使用一个游标来遍历存储在数据库表中的规则列表。

当我们遍历游标时,我们检查@@sqlstatus !=2。当游标中的结果集完全遍历时,sqlstatus 将为 2。

当我们使用 exec 直接执行存储过程时,它会返回结果。它也通过 java JDBC 代码运行。但是当我们通过hibernate调用时,条件检查失败@@sqlstatus!=2,因为它找到了sqlstatus = 2。我们在存储过程中尝试了一些调试语句,当通过hibernate调用存储过程时,它不会以 sqlstatus = 2 遍历结果集,因此存储过程返回 null。

我们使用的是 sybase ASE 15.7,hibernate 4.1 版本。

请告诉我可能是什么问题。

【问题讨论】:

    标签: hibernate sybase


    【解决方案1】:

    游标达到@@sqlstatus = 2 是很自然的,因为这表示结果集的结尾,并且通常会读取游标直到该条件发生。究竟为什么这种情况会发生在一种情况下而不是另一种情况下,这里的任何人都可能无法弄清楚。可能会有所不同,因为数据不同(在其中一种场景中是否存在未处理的事务?),或其他原因。看来您必须对 SQL 代码进行一些调试。

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 2019-02-20
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      相关资源
      最近更新 更多