------------------------游标变量-------------------------
定义――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