在过程或函数中使用 SYS_REFCURSOR
Posted
技术标签:
【中文标题】在过程或函数中使用 SYS_REFCURSOR【英文标题】:Use SYS_REFCURSOR in procedure or function 【发布时间】:2012-06-27 03:50:27 【问题描述】:我会使用JDBC
从java调用procedure
或function
。
就最佳实践和性能而言,最好使用返回SYS_REFCURSOR
的function
或返回SYS_REFCURSOR
的procedure
。
例如。
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的主要内容,如果未能解决你的问题,请参考以下文章