现在的位置: 首页 > 综合 > 正文

using dynamic sql for cursor usage

2018年04月17日 ⁄ 综合 ⁄ 共 714字 ⁄ 字号 评论关闭

在项目有个procedure返回一个cursor变量。 但sql的执行效率很低,于是决定用dynamic sql, 也在网上搜了下, 自己写了个例子。

 

create or replace procedure emp_select(deptno in number, outCursor out sys_refcursor)
is
    v_sql varchar2(500);
begin
    v_sql :='select empno, ename,sal from emp where deptno='||deptno;
    dbms_output.put_line('SQL IS:'||v_sql);
    open outCursor for v_sql;
exception when others then
    dbms_output.put_line(sqlerrm);
end;
/

variable p_cursor REFCURSOR;

begin
    emp_select(10,:p_cursor);   
end;
/
print p_cursor;

 

在这个例子中说明两个地方:

sys_refcursor:是oracle9i预定义的一个系统cursor.和他对应的用法是在包头中定义,例如:

create or replace type t_emp as object{

empno emp.empno%type,

ename emp.ename%type,

sal emp.sal%type

};

 

type t_cursor is ref cursor return  t_emp;(强引用游标)

type t_cursor if ref cursor;(弱引用游标)

 

REFCURSOR: ref cursor在sqlplus中的写法。

抱歉!评论已关闭.