--游标
--高级语言中
--基本类型的变量:存放的是实际的数据。
--引用类型的变量:存放的是某个数据区域的地址(指针、引用都是引用类型的变量)。
--class Student
--{
--int age;
--string name;
--}
--Student s = new Student();
--s.age=12;
--s.name='Tom';
--指针、引用:存放地址的变量。
--游标:内容自动增长的指针变量,无法手动修改其值。
--关键字: cursor
--显式游标的使用步骤:
--1、声明 (在declare 子句中,用cursor关键字)
--2、打开 (open)
--3、循环读取游标所指向的数据(fetch..into..)
--4、关闭(close)
--注意: 游标自带的变量%notfound,判断数据是否取完。
--显示游标例子:用游标循环读取 dept的数据
declare
cursor cur_dept --声明游标
is select * from dept; --is关键字引出游标所指向的数据区
v_dept dept%rowtype;
begin
open cur_dept;
loop
fetch cur_dept into v_dept; --fetch作用:1、移向下一行 2、取出指向的数据
exit when cur_dept%notfound; --如有数据%notfound返回false,没有返回true
dbms_output.put_line(v_dept.dname);
end loop;
close cur_dept; --关闭游标
end;
--打印部门编号为30的所有员工的工号、姓名
declare
cursor cur_emp
is select empno,ename from emp where deptno=30;
v_no emp.empno%type;
v_name emp.ename%type;
begin
open cur_emp;
loop
fetch cur_emp into v_no,v_name;
exit when cur_emp%notfound;
dbms_output.put_line(v_no||' '||v_name);
end loop;
close cur_emp;
end;
--输出部门的平均工资和最高工资,以及每个部门的部门名称和地址
--%type
--%rowtype
declare
v_avg emp.sal%type;
v_max emp.sal%type;
v_dept dept%rowtype;
v_deptno dept.deptno%type;
begin
v_deptno:='&请输入';
select avg(sal),max(sal)
into v_avg,v_max
from emp where deptno=v_deptno;
dbms_output.put_line(v_avg||' '||v_max);
select *
into v_dept
from dept where deptno=v_deptno;
dbms_output.put_line(v_dept.dname||' '||v_dept.loc);
end;
--游标for循环
begin
for v in (select * from dept)
loop
dbms_output.put_line(v.dname||' '||v.loc);
end loop;
end;