Oracle中会为查询语句分配一个空间,储存结果集,而这块空间由游标来命名的,因此,也可以通过游标来访问这块内存中存储的信息。简单来说,游标就是一个用来查询结果集的指针
游标本身是无法输出的
一、游标分为显示游标和隐式游标
1.隐式游标:PL/SQL会为所有的SQL操作(包括只返回一条操作记录的查询操作和所有的DML语句)声明一个隐式游标
注意:此时不能返回多条记录
例题1:在emp表中对某部门的员工薪水增加100元,并显示本次更新操作共涉及了多少员工。
(1)用之前的方法去做:
declare
v_sal emp.sal%type;
v_deptno emp.deptno%type:=&aa;
v_num number;
begin
update emp set sal=sal+100 where deptno=v_deptno;
select count(empno) into v_num from emp where deptno=v_deptno;
dbms_output.put_line(v_num);
end;
(2)用游标的方法去做
declare
v_deptno emp.deptno%type:=&aa;
begin
update emp set sal=sal+100 where deptno=v_deptno;
--可以直接利用游标的属性去做,%rowcount返回已提取的记录的行数。
dbms_output.put_line(sql%rowcount);--隐式游标引用该属性
end;
上面的是简单的对游标的使用,下面讲解一下游标的属性:
%isopen:测试游标是否已经打开,返回boolean值
%found:fetch后,是否提取到了记录,返回boolean值
%notfound:fetch后,是否没有提取到记录,返回boolean
%rowcount:返回游标中已提取的记录行数,返回整数
2.显示游标:暂存查询取出的多行数据,然后一行一行地进行处理
(1)步骤:声明游标,打开游标,提取数据,关闭游标
(2)fetch语句的作用:取出一条记录、指针指向下一条记录
例题2:声明一个游标,用于取得部门10的员工的姓名和薪水信息:
declare
cursor mycur is select ename,sal from emp where deptno=10;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open mycur;
loop
fetch mycur