------------------------游标变量-------------------------

定义——PLSQL变量,可以在运行的时候者针对不同的查询使用这个变量。

优势——可以在程序之间传递结果集,在运行的时候一个游标可以关联多个查询。


一、基本使用方法


declare

  type rc is ref cursor;

  v_rc rc;

  hrc_rec hrc_tab%rowtype;

begin

 open v_rc for select * from hrc_tab;

 LOOP

   fetch v_rc into hrc_rec;

   exit when(v_rc%notfound);

   dbms_output.put_line(to_char(hrc_rec.hrc_code)||' '||hrc_rec.hrc_descr);

 END LOOP ;

 close v_rc;

end;


二、游标变量的赋值操作

declare

 type rc is ref cursor;

 v_rc1 rc;

 v_rc2 rc;

 hrc_rec hrc_tab%rowtype;

begin

 open v_rc1 for select * from hrc_tab;

 v_rc2:=v_rc1;   --将整个结果集赋值给游标变量

 LOOP

   fetch v_rc2 into hrc_rec;

   exit when(v_rc2%notfound);

   dbms_output.put_line(to_char(hrc_rec.hrc_code)||' '||hrc_rec.hrc_descr);

 END LOOP ;

 close v_rc1;

end;


注意:

1、赋值操作一定是在open之后

2、不能给游标变量赋予null值

3、不能判断游标变量是否相等,(if v_rc1=v_rc2 then......错误的操作)

4、判断游标是否为空的时候,只能用游标的属性(v_rc2%notfound)

if v_rc2 is null then.....(错误的写法)


三、使用同一个游标打开多个查询


declare

 type rc is ref cursor;

 v_rc rc;

 hrc_rec hrc_tab%rowtype;

 v_hrc_descr varchar2(20);

 v_org_short_name varchar2(30);

begin

 open v_rc for select * from hrc_tab;

 LOOP

   fetch v_rc into hrc_rec;

   exit when(v_rc%notfound);

   dbms_output.put_line(to_char(hrc_rec.hrc_code)||' '||hrc_rec.hrc_descr);

 END LOOP ;

 close v_rc;


 open v_rc for select h.hrc_descr,o.org_short_name

                      from org_tab o,hrc_tab h

                      where o.hrc_code=h.hrc_code

                      order by 2;

 LOOP

   fetch v_rc into v_hrc_descr,v_org_short_name;

   exit when(v_rc%notfound);

   dbms_output.put_line(v_hrc_descr||' '||v_org_short_name);

 END LOOP ;

 close v_rc;

end;


练习:用定义一个游标变量的方式,分别打开两个查询并输出:

A、员工的姓名、编号、薪资、职位,雇佣日期、部门名称

B、员工的编号、薪水以及薪水的等级的查询结果,关联salgrade