【发布时间】:2020-02-05 20:42:35
【问题描述】:
我在 Oracle Pl/Sql 中创建一个存储过程,首先我必须创建一个二维数组,其中记录的 ID 与特定条件匹配,我已经这样做了,接下来我必须通过特定表进行查询并获取我的“最终数组”的 ID 数据。
这是我循环遍历最终数组并查询表的 SP 部分。
FOR x IN array_final.FIRST .. array_final.LAST
LOOP
OPEN voCursor FOR
SELECT ID AS IDTRX FROM TBL_TRANSACTION WHERE ID in (array_final(x)(1));
dbms_output.Put_line(x);
totReg := x;
END LOOP;
问题是,光标只获取最后一条记录。
这是我从结果集获取结果的 Java 代码。
这就是控制台显示的内容,它说 2 条记录,但只显示一个 ID,最后一个
如何将 2 条记录放入 for 循环内的游标中?有没有更好的方法来做到这一点?
欢迎任何帮助,问候
【问题讨论】:
-
在循环中打开游标而不用它做任何事情是没有意义的。每次打开游标时,您都会丢弃先前的查询。假设
voCursor是过程中的out参数,调用者将只能从用于打开游标的最后一个查询中获取数据。我猜这就是您所看到的,假设您的 Java 代码中的totReg以某种方式从 PL/SQL 代码中的totReg填充。 -
voCursor 是一个输出参数,这正是我面临的问题,我需要光标中的所有数据,我该怎么做?
-
array_final是如何声明的?它是 SQL 类型还是 PL/SQL 类型?它是如何填充的?最简单的选择是采用填充该集合的任何查询并将其与SELECT语句结合起来,而不是在一个步骤中填充集合并在后续步骤的查询中使用它。