动态游标
定义语法
--声明 $cursor_name$ sys_refcursor --打开动态游标 open $cursor_name$ is 查询语句; --关闭游标 close $cursor_name$; --声明动态游标类型 type $type_name$ is ref cursor; --声明一个动态游标变量 $v_cursor_name$ type_my_ref;
使用
动态游标可以获得不同的结果集,可以设置条件,返回不同的结果集,一般和过程一起使用
--创建过程list create or replace procedure list(result_set in out sys_refcursor, which in number) is begin --打开动态游标时在为它指定查询语句 --1就是返回员工表,其他就返回部门表 if which=1 then open result_set for select * from employee; else open result_set for select * from department; end if; end; / --调用list过程,根据输入的数字输出某个表的全部信息 declare --声明一个动态游标类型 type type_my_ref is ref cursor; --声明一个动态游标变量 my_ref type_my_ref; emp employee%rowtype; dept department%rowtype; which number default &请输入; begin --得到一个查询结果集 list(my_ref, which); loop if which=1 then /* handle employee */ fetch my_ref into emp; exit when my_ref%notfound; dbms_output.put_line(emp.empno||','||emp.ename||','||emp.job||','||emp.sal); else /* handle department */ fetch my_ref into dept; exit when my_ref%notfound; dbms_output.put_line(dept.deptno||','||dept.dname||','||dept.loc); end if; end loop; --close cursor close my_ref; end; /