--PLSQL 动态游标 分别拿出emp、dept表中所有的数据
declare
c1 sys_refcursor;--声明一个动态游标
e emp%rowtype;--声明一个emp表的行记录数据类型
d dept%rowtype;--声明一个dept表的行记录数据类型
begin
open c1 for select * from emp;--打开一个结果集
loop--循环开始
fetch c1 into e;--每次循环取一行,并把光标下移一行。进行依次获取每一行数据
exit when c1%notfound;--当找不到下一行时,执行循环退出
--每次循环输出一下每一行的数据
dbms_output.put_line(rpad(e.empno,6)||rpad(e.ename,10)||rpad(e.job,12)||rpad(rpad(nvl(e.mgr,0),4),6)||rpad(to_char(e.hiredate,'yyyy-mm-dd day'),18)||rpad(e.sal,6)||rpad(nvl(e.comm,0),6)||e.deptno);
end loop;--达到循环退出条件,执行此语句
close c1;
--关闭上面被打开的游标结果集的游标(光标)。plsql程序中上一个游标不结束,无法继续下一个游标的开启和获取数据。
dbms_output.put_line('```````````````````````````````````````````````');
open c1 for select * from dept;
loop
fetch c1 into d;
exit when c1%notfound;
dbms_output.put_line(rpad(d.deptno,6)||rpad(d.dname,20)||d.loc);
end loop;
close c1;
end;