2010-03-16 3 views
0

У меня есть хранимая процедура, которая возвращает реф курсор следующим образом:Как вернуть строки из хранимой процедуры Oracle с помощью SELECT?

CREATE OR REPLACE PROCEDURE AIRS.GET_LAB_REPORT (ReportCurTyp OUT sys_refcursor) 
AS 
    v_report_cursor sys_refcursor; 
    report_record  v_lab_report%ROWTYPE; 
    l_sql    VARCHAR2 (2000); 
BEGIN 
    l_sql := 'SELECT * FROM V_LAB_REPORT'; 

    OPEN v_report_cursor FOR l_sql; 

    LOOP 
     FETCH v_report_cursor INTO report_record; 

     EXIT WHEN v_report_cursor%NOTFOUND; 
    END LOOP; 

    CLOSE v_report_cursor; 
END; 

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

SELECT * FROM GET_LAB_REPORT()

, но я не могу понять, как сидеть.

Любые идеи?

ответ

1

Всякий раз, когда мне приходилось это делать; Я использовал функции Oracle TYPE и CAST.

Что-то вроде:

SELECT * 
FROM TABLE(CAST(F$get_Cassette_Tracking('8029241') AS cass_tracking_tab_type)) 

Вам нужно настроить тип и все столбцы, вам нужно, и они использовали:

pipe ROW(out_obj) 

, чтобы захватить ваши данные. Есть много способов сделать это, и если я смогу извлечь лучший пример, я это сделаю, но это может дать вам идею.

+0

Я получил его на работу, используя этот метод, но в конце концов я решил преобразовать хранимую процедуру в функцию. – Calanus

Смежные вопросы