我有一个这样构造的 PL/SQL 查询:
DECLARE
a NUMBER;
B NUMBER;
CURSOR cursor
IS
( SOME SELECT QUERY);
BEGIN
OPEN cursor;
LOOP
SOME STUFF;
END LOOP;
CLOSE cursor;
END
如何使用 jdbc 从 java 代码运行此查询并获取结果集?我尝试在不使用游标的情况下运行查询,并且它运行正常。我想不出在java代码中做到这一点的方法。如果我直接在 oracle 客户端上运行查询,它可以正常工作。所以查询没有问题。
PS 由于某些限制,我不想将代码存储为存储过程并调用它。
原文由 Rajat Garg 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是不可能的。您不能从匿名 PL/SQL 块返回结果集(因此无法从 JDBC 获取它)。
您将需要直接从 JDBC 运行选择。
唯一的,真正丑陋的解决方法是使用
dbms_output.put_line()
然后阅读。但这是一个非常丑陋的 hack,直接在 JDBC 中处理 SELECT 查询的结果要好得多。编辑 1
下面是一个使用 dbms_output 的小例子:
编辑 2(这对于评论来说太长了)
嵌套循环来检索数据几乎总是一个坏主意。如果你发现自己在做这样的事情:
这样做会更有效率:
这可以在 JDBC 中使用这样的东西在没有过多内存的情况下进行处理:
即使您处理数十亿行,上面的代码也只会在内存中保存一行。准确地说:JDBC 驱动程序实际上会预取多行。默认值为 10,可以更改。但即便如此,您也没有过多的内存使用。