【发布时间】:2014-02-10 11:15:46
【问题描述】:
在循环中,我正在调用参数化游标。在任何特定步骤中,如果游标返回行,则此循环结束,我必须将游标作为参考游标返回。如何在不执行两次相同查询的情况下检查行数?
procedure pr_test
(
v_data varray;
,ret_data sys_refcursor
)
as
cursor c_q(x)
select * from table
where col1 = x;
...
begin
...
for in 1..v_data.count loop
open ret_data for c_q(v_data(i));
----- here some logic is required --------
/*if rowcount of re_data > 0 then
return ret_data;
else
close ret_data;
end if;*/
end loop;
end;
【问题讨论】:
-
那么交易是什么?您打开光标并返回它。如果没有数据,调用者(正在使用游标)只需要处理将引发的 NO_MORE_DATA 异常——无论如何他们都需要这样做,因为最终游标将用完数据。 IMO 将未知且可能大量的行读入内存不是一个可行的解决方案,而且在我的营业地点,这不会通过代码审查。 YMMV。分享和享受。
-
在代码中你可以看到返回是在for循环里面。事实上,您可以简单地认为目标是在有数据时返回一个游标,否则检查下一个驱动循环元素。如果我们打开游标,它就无法返回。所以对于包含记录的目标游标是无法返回的。
标签: oracle plsql sys-refcursor