如何使用SELECT从Oracle存储过程返回行?

时间:2010-03-16 11:50:23

标签: oracle stored-procedures plsql

我有一个存储过程,它返回一个引用游标,如下所示:

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语句中使用此存储过程的输出,如:

SELECT * FROM GET_LAB_REPORT()

但我似乎无法理解语法。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

每当我必须这样做时;我使用了Oracle TYPE和CAST功能。

类似的东西:

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

您需要设置TYPE以及所需的所有列并使用它们:

pipe ROW(out_obj)

捕获您的数据。有很多方法可以做到这一点,如果我能找到一个更好的例子,我会,但这可能会给你一个想法。

答案 1 :(得分:0)

请参阅此SO以获取一个工作示例:Oracle Parameters with IN statement?