1

我正在运行一个 java 方法来调用 Oracle 11.2 数据库中的存储过程。我正在使用 JDBC 连接调用带有 OUT 参数的存储过程,以将数据库游标作为结果集返回给 java 方法。一切正常。

现在我想将第二个结果集返回给 SAME 存储过程中的 java 方法。如果我只是在这个存储过程中添加第二个 OUT 参数并打开第二个游标,那么一切似乎也可以正常工作。

我想知道这是否正确,因为两个游标都只是在存储过程中打开,依靠 java 方法来关闭它们。

游标或结果集是否会因为第一个游标被OPEN编辑,然后选择了一些东西,然后第二个游标被OPEN选择了不同的东西而导致问题?选择的第二个东西会搞砸第一个选择的东西吗,反之亦然?或者数据库是否足够聪明,可以知道何时打开第二个游标,任何新选择都指向它而不是第一个游标打开?

我对这一切都很陌生,只是想检查一下它是如何打算将多个游标返回到 java 中的相应结果集中的。感谢您的任何评论。

4

1 回答 1

2

两个游标都是完全不同的实体,它们指向完全不同的查询,这些查询返回完全不同的 SCN 的结果。因此,数据库不存在混淆的风险。您的 Java 代码将获得ResultSet需要单独获取的单独对象,因此您的代码需要确保它是从右侧获取的ResultSet- 如果有任何混淆,则更有可能是您所在的代码中的错误从错误的游标中获取或在所有情况下都无法关闭两个游标。

虽然从存储过程中返回多个游标在技术上是完全可能的,但我倾向于怀疑有更好的解决方案。大多数情况下,如果有多个相关游标,这意味着调用代码正在手动编码某种连接操作。如果是这种情况,最好让 Oracle 执行连接并返回单个REf CURSOR.

于 2012-04-14T19:30:50.317 回答