在过程或函数中使用 SYS_REFCURSOR

Posted

技术标签:

【中文标题】在过程或函数中使用 SYS_REFCURSOR【英文标题】:Use SYS_REFCURSOR in procedure or function 【发布时间】:2012-06-27 03:50:27 【问题描述】:

我会使用JDBC从java调用procedurefunction

就最佳实践和性能而言,最好使用返回SYS_REFCURSORfunction 或返回SYS_REFCURSORprocedure

例如。

Procedure

create or replace procedure my_proc(p_deptno IN number,p_emp_no IN varchar2
    , p_cursor OUT SYS_REFCURSOR)
    is
    begin
    open p_cursor FOR
    select *
    from emp
    where deptno = p_deptno and emp_number=p_emp_no;
    end proc;
    /


Function

CREATE OR REPLACE FUNCTION my_func (p_deptno IN number,p_emp_no IN varchar2)
   RETURN SYS_REFCURSOR
AS
   p_cursor   SYS_REFCURSOR;
BEGIN
   OPEN p_cursor FOR
      select *
        from emp
        where deptno = p_deptno and emp_number=p_emp_no;
   RETURN p_cursor;
END;
/

以上哪一项是更好的选择?有人可以对此提供一些见解吗? 任何帮助都是非常可观的。

谢谢

【问题讨论】:

【参考方案1】:

从性能的角度来看,这并不重要。

一般来说,如果 PL/SQL 块的目的是向调用者返回某些内容,则它应该在函数中。如果 PL/SQL 块的目的是做某事(删除、插入、更新等),它应该在一个过程中。由于这段代码的目的是向调用者返回一些东西,所以它是一个函数是合适的。

【讨论】:

以上是关于在过程或函数中使用 SYS_REFCURSOR的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Oracle 中使用函数、过程或序列的同义词

在 sqlplus 中转储函数或过程的主体

如何使用JDBC调用存储在数据库中的函数或存储过程 */

如何使用 JDBC 调用存储在数据库中的函数或存储过程

在 Oracle 12“包”中,如何使变量、函数或过程可访问或不可访问?

vb过程中出现子程序或函数未定义怎么解决