我正在运行一个java方法来调用Oracle 11.2数据库中的存储过程。我正在使用JDBC连接使用OUT参数调用存储过程,以将数据库游标作为结果集返回给java方法。一切都很好。
现在我想将第二个结果集返回给SAME存储过程中的java方法。如果我只是向这个存储过程添加第二个OUT参数并打开第二个游标,一切似乎也正常。
我想知道这是否正确,因为两个游标都只是在存储过程中打开,依赖于java方法来关闭它们。
光标或结果集是否会出现问题,因为第一个光标是OPEN
,之后选择了一些东西,然后第二个光标被OPEN
编辑,选择了不同的东西?选择的第二个东西是否会搞砸所选的第一个东西,反之亦然?或者数据库是否足够智能,以便知道第二个光标何时打开,是否有任何新选择指向它而不是第一个光标打开?
我是所有这一切的新手,只是想检查一下这是如何将多个游标返回到java中相应的结果集中。感谢您的任何意见。
答案 0 :(得分:2)
两个游标都是完全不同的实体,指向完全不同的查询,这些查询返回完全不同的SCN的结果。因此,数据库不存在混淆的风险。您的Java代码将获得需要单独获取的单独ResultSet
个对象,因此您的代码需要确保它从右侧ResultSet
获取 - 如果存在任何混淆,则更有可能是你的代码中的一个错误,你从错误的光标中取出或在所有情况下都无法关闭两个游标。
虽然技术上很可能从存储过程返回多个游标,但我倾向于怀疑有更好的解决方案。大多数情况下,如果存在多个相关游标,则意味着调用代码是手动编码某种联接操作。如果是这种情况,那么让Oracle做联接并返回单个REf CURSOR
会更好。