Oracle过程:返回数据的选项

Oracle过程:返回数据的选项,oracle,stored-procedures,oracle11gr2,Oracle,Stored Procedures,Oracle11gr2,我已经习惯了Microsoft SQL Server,其中存储过程的最后一次SELECT查询决定了返回的内容 在Oracle中,我总是使用SYS\u REFCURSOROUT参数从查询返回数据 在Oracle存储过程中,是否有其他从SELECT查询返回数据的选项? 只选择一行的SELECT查询怎么样?是否仍然需要一个SYS\u REFCURSOR 编辑:我需要知道Oracle 11g R2的答案(应该明确地提到这一点,而不仅仅是在标记中)。Oracle PL/SQL过程可以返回所有受支持的基本数

我已经习惯了Microsoft SQL Server,其中存储过程的最后一次
SELECT
查询决定了返回的内容

在Oracle中,我总是使用
SYS\u REFCURSOR
OUT
参数从查询返回数据

在Oracle存储过程中,是否有其他从
SELECT
查询返回数据的选项?

只选择一行的
SELECT
查询怎么样?是否仍然需要一个
SYS\u REFCURSOR


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

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

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

直到现在,Oracle还不支持SQL Server风格的过程隐式返回结果集,您必须显式地返回一些东西-可以是SYS\u REFCURSOR或集合或其他任何东西


在Oracle 12C中,添加了一个名为的新功能,该功能旨在模拟SQL Server的工作方式。然而,这实际上是为了支持从SQL Server迁移现有代码;对于新的Oracle开发,最好了解Oracle通常的工作方式。

直到现在,Oracle还不支持SQL Server风格的过程隐式返回结果集,您必须显式返回某些内容-可能是SYS\u REFCURSOR或集合或其他内容


在Oracle 12C中,添加了一个名为的新功能,该功能旨在模拟SQL Server的工作方式。然而,这实际上是为了支持从SQL Server迁移现有代码;对于新的Oracle开发,最好了解Oracle通常的工作方式。

另一个选项是流水线函数,在该函数中,您可以将函数称为:

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

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

另一个选项是流水线函数,在该函数中,您可以将函数调用为:

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

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

为了澄清,ORACLE过程本身无法“返回”,SYS\u REFCURSOR OUT参数更像是在过程中更改变量引用的值。 除了
SYS\u REFCURSOR
,如果只返回表的一行,比如EMPLOYEE,还可以将记录定义为
EMPLOYEE%ROWTYPE
,并将其用作
OUT
类型

或者说:

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

只是为了澄清,ORACLE过程本身不能“返回”,SYS_REFCURSOR OUT参数更像是在过程内更改变量引用的值。 除了
SYS\u REFCURSOR
,如果只返回表的一行,比如EMPLOYEE,还可以将记录定义为
EMPLOYEE%ROWTYPE
,并将其用作
OUT
类型

或者说:

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

非常感谢。你所说的“收藏”或“收藏”是什么意思?我说的“收藏”或“收藏”,我的意思是,根据尼古拉斯·杜兰德的回答,还有很多其他的选择。对不起,我错了。非常感谢。非常感谢。你所说的“收藏”或“收藏”是什么意思?我说的“收藏”或“收藏”,我的意思是,根据尼古拉斯·杜兰德的回答,还有很多其他的选择。对不起,我错了。非常感谢。