有没有办法选择ref游标的内容作为SQL Select语句的一部分?

时间:2009-02-20 04:10:38

标签: sql oracle

我希望能够通过从另一个参考光标中选择一个参考光标并对其进行转换。例如,像这样:

begin
declare c_cur sys_refcursor;
        c_cur2 sys_refcursor;

open c_cur for 
  select 1 from dual;

open c_cur2 for
  select 1
    from c_cur
   where 1 = 2;

end;
/

在Oracle中是否可以在SELECT语句中选择FROM结果?

3 个答案:

答案 0 :(得分:1)

您不能完全按照自己的意愿行事,但以下内容可能符合您的需求。基本上是两个游标for循环,其中一个从第一个游标接收数据。

declare

cursor my_cur_1 is
select foo from bar;

cursor my_cur_2 (my_foo bar.foo%TYPE) is
select foo2 from bar2 where bar2.foo = my_foo;

begin

for t in my_cur_1 LOOP

  for s in my_cur_2(t.foo) LOOP
  -- do some stuff here with data from both.
  end loop;
end loop;

end;

答案 1 :(得分:0)

我不确定你为什么要这样做。我认为你所寻找的东西更像是bulk collect。这将允许您将结果提取到集合或表中,然后您可以从第二个查询中的那些中进行选择。更好的是,将它重构为一个更优雅的查询。

答案 2 :(得分:0)

看起来你只想动态构建一个ref_cursor。

你可以这样做:

FUNCTION test_dyn_ref RETURN sys_refcursor IS
  l_cur2  sys_refcursor;
  l_query varchar2(4000);
begin
  l_query := 'select 1 from dual ';
  l_query := l_query||' where 1 = 2 ';
  --
  open l_cur2 for l_query;
  return l_cur2;
end;