Oracle过程:返回数据的选项

时间:2014-01-17 09:34:54

标签: oracle stored-procedures oracle11gr2

我习惯使用Microsoft SQL Server,其中存储过程的最后一个SELECT查询确定返回的内容。

在Oracle中,我总是使用SYS_REFCURSOR OUT参数从查询中返回数据。

还有其他选择从Oracle存储过程中的SELECT查询返回数据吗?

SELECT只选择一行的查询怎么样?还需要SYS_REFCURSOR吗?

编辑:我需要知道Oracle 11g R2的答案(应该明确提到而不仅仅是在标签中)。

4 个答案:

答案 0 :(得分:1)

Oracle PL / SQL过程可以返回所有支持的基本数据类型(日期,varchar2,数字)加上复杂(记录,表格,varray)

答案 1 :(得分:1)

到目前为止,Oracle还没有支持隐式返回结果集的SQL Server样式的程序,你必须显式地返回一些东西 - 可能是SYS_REFCURSOR或集合或其他什么。

在Oracle 12C中添加了一个名为Implicit Statement Results的新功能,旨在模拟SQL Server的工作方式。但是,这实际上是为了支持从SQL Server迁移现有代码;对于新的Oracle开发,最好建议您学习Oracle通常的工作方式。

答案 2 :(得分:1)

另一个选项是流水线功能,您可以在其中调用函数:

select ...
from   table(my_function(param1 => 1, ...))

有关详细信息,请参阅文档。

答案 3 :(得分:1)

为了澄清,ORACLE程序本身不能“返回”,SYS_REFCURSOR OUT参数更像是更改过程中变量引用的值。 除了SYS_REFCURSOR之外,如果您只返回表格的一行(例如EMPLOYEE),您还可以将记录定义为EMPLOYEE%ROWTYPE并将其用作OUT类型。

或者喜欢:

PROCEDURE pr_proc (v_input in number
                   v_emp_row out EMPLOYEE%ROWTYPE )
    IS