我们在项目中使用hibernate作为ORM工具。我们有一个场景,我们需要调用一个存储过程。现在,此存储过程在内部使用游标来遍历存储在数据库表中的规则列表。
当我们遍历游标时,我们检查@@sqlstatus !=2。当游标中的结果集被完全遍历时,sqlstatus将为2。
当我们使用exec直接执行存储过程时,它会返回结果。此外,它还可以通过java JDBC代码运行。但当我们通过hibernate调用时,它在条件check @@sqlstatus !=2中失败,因为它以某种方式找到sqlstatus = 2。我们尝试了存储过程中的一些调试语句,当通过hibernate调用存储过程时,它不会像sqlstatus =2一样遍历结果集,因此存储过程返回null。
我们使用的是sybase ASE 15.7,hibernate 4.1版本。
请让我知道可能是什么问题。
发布于 2017-05-05 03:05:25
游标到达@@sqlstatus = 2是很自然的,因为这表示结果集的结束,通常游标在该条件出现之前一直被读取。为什么在一种情况下会发生这种情况,而在另一种情况下却不会发生,这是在座的任何人都不可能弄清楚的。可能会有不同之处,因为数据不同(在其中一个场景中是否有打开的事务?),或者其他东西。看起来您必须对您的SQL代码进行一些调试。
https://stackoverflow.com/questions/43738074
复制相似问题