Есть ли способ выбора содержимого курсора ref как части оператора SQL Select? - PullRequest
1 голос
/ 20 февраля 2009

Я хотел бы иметь возможность взять курсор ref и преобразовать его, выбрав из него другой курсор ref. Например, что-то вроде этого:

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 выбрать ОТ результатов курсора ref в операторе SELECT?

Ответы [ 3 ]

1 голос
/ 20 февраля 2009

Вы не можете делать именно то, что вы хотите сделать там, однако следующее может соответствовать вашим потребностям. В основном два курсора для циклов, один из которых получает данные от первого курсора.

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;
0 голосов
/ 20 февраля 2009

Похоже, вы просто хотите динамически создать 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;
0 голосов
/ 20 февраля 2009

Я не уверен, почему ты хочешь. Я думаю, что вы ищете что-то более похожее на массовый сбор . Это позволит вам получить ваши результаты в коллекцию или таблицу, а затем вы можете выбрать из тех, что во втором запросе. А еще лучше, преобразовать это в один более элегантный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...