Объединение данных из курсоров в один - PullRequest
5 голосов
/ 03 ноября 2010

У меня есть хранимая процедура, которая выполняет другую хранимую процедуру несколько раз. Мне нужны данные объединения и возврата, которые у меня есть после выполнения второй процедуры.

Можно ли каким-то образом объединить данные из нескольких курсоров в один курсор? Это возможно без временных таблиц или табличного типа данных?

РЕДАКТИРОВАТЬ: Счетчик курсора для объединения фактически равен n (где n равно 1, 2, 3 и т. Д., Обнаружение с помощью другой процедуры).

Например:

CREATE OR REPLACE PROCEDURE proc_data
( data_out OUT SYS_REFCURSOR
) IS
BEGIN
 OPEN data_out FOR SELECT '1' NUM FROM dual;
END;
/

CREATE OR REPLACE PROCEDURE proc_result
( data_out OUT SYS_REFCURSOR
) IS
 data1 SYS_REFCURSOR;
 data2 SYS_REFCURSOR;
BEGIN
 PROC_DATA(data1);
 PROC_DATA(data2);
 -- select data1 and data2 into data_out - how?
END;
/

SET SERVEROUTPUT ON

DECLARE 
 data_out SYS_REFCURSOR;
 temp_row VARCHAR2(10);
BEGIN
 PROC_RESULT(data_out);
  LOOP
    FETCH data_out INTO temp_row;
    EXIT WHEN data_out%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(temp_row);
  END LOOP;
  CLOSE data_out;
END;
/

ожидаемый результат:

---
1   
1   

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

Этого можно добиться, создав конвейерную функцию , которая позволит вам

select table(PROC_DATA(data1)) union table(PROC_DATA(data2))
2 голосов
/ 03 ноября 2010

Нет, это невозможно. Хорошая дискуссия в AskTom по этому вопросу, посмотрите, может быть, некоторые обходные пути могут помочь вам.

...