我们在项目中使用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版本。
请让我知道可能是什么问题。
答案 0 :(得分:1)
游标到达@@ sqlstatus = 2是很自然的,因为这表示结果集的结束,并且通常会读取游标,直到该条件发生。究竟为什么这种情况发生在一个场景中而不是另一个场景中,这里的任何人都不会想到这一点。可能存在差异,即数据不同(在其中一个场景中是否存在开放事务?)或其他内容。看起来你必须对SQL代码进行一些调试。