using dynamic sql for cursor usage

在项目有个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中的写法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值