欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle学习笔记(二十二) REF 动态游标

程序员文章站 2022-03-07 22:21:55
动态游标 定义语法 使用 动态游标可以获得不同的结果集,可以设置条件,返回不同的结果集,一般和过程一起使用 ......

动态游标

定义语法

--声明
$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;
/