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

Posted

技术标签:

【中文标题】如何使用 SELECT 从 Oracle 存储过程中返回行?【英文标题】:How do I return the rows from an Oracle Stored Procedure using SELECT? 【发布时间】:2010-03-16 11:50:22 【问题描述】:

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

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))

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

pipe ROW(out_obj)

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

【讨论】:

我确实使用这种方法让它工作,但最后我决定将存储过程转换为函数。【参考方案2】:

有关工作示例,请参阅此 SO:Oracle Parameters with IN statement?

【讨论】:

以上是关于如何使用 SELECT 从 Oracle 存储过程中返回行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在存储过程(Oracle)中使用 SELECT 请求?

如何从 Laravel 执行 Oracle 存储过程

如何解决oracle存储过程select into问题

找出从哪里调用存储过程 - [Oracle]

Oracle:如何“稍后”运行存储过程

PL_sql如何执行oracle存储过程