我习惯使用Microsoft SQL Server,其中存储过程的最后一个SELECT
查询确定返回的内容。
在Oracle中,我总是使用SYS_REFCURSOR
OUT
参数从查询中返回数据。
还有其他选择从Oracle存储过程中的SELECT
查询返回数据吗?
SELECT
只选择一行的查询怎么样?还需要SYS_REFCURSOR
吗?
编辑:我需要知道Oracle 11g R2的答案(应该明确提到而不仅仅是在标签中)。
答案 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