--游标类型:用来表示一个结果集(多条数据)的类型
1.隐式游标:指DBMS(如Oracle)在执行SELECT…into,delete,update,insert等语句时的SQL游标,它提供最近执行SQL语句的情况,一般用在delete,update语句后,用来查询最近的操作是否成功
任何一个DML语句执行的时候都会默认创建一个游标
这个游标的名字是SQL
隐式游标有四个属性可以使用:
%found --执行的语句影响到了一行或者多行数据,就为true,否则为false
%notfound --执行的语没有影响数据,就为true,否则为false
%rowcount --获得执行语句影响到了多少行
%isopen --判断游标是否打开,隐式游标始终是false
%前缀是SQL
--练习:判断数据是否修改成功
begin
update empbak set sal=10000 where empno=&no;
if SQL%rowcount=0 then
dbms_output.put_line('更新失败!!');
else
dbms_output.put_line('更新成功!!');
end if;
end;
2.显式游标:当一行查询结果超过时,用户就不能使用select into语句,此时就需要一个显式游标,声明、打开及管理都是需要程序员手动操作的,通常用来处理查询结果是多行或零行的情况。
oracle显式游标的属性:
属性名 返回值
Cursor_name%ISOPEN TURE:游标打开;FALSE:游标关闭
Cursor_name%FOUND TURE:最近一次提取数据成功;FALSE:最近一次提取数据失败
Cursor_name%NOTFOUND TURE:最近一次提取数据失败;FALSE:最近一次提取数据成功
Cursor_name%ROWCOUNT 最近一次提取的行的序号(即已经从游标中提取的记录行数)
(1).声明:在declare部分使用
Cursor 游标名 is 查询语句;
注意:查询语句不能带into字句。
(2).打开:写在begin块中。
语法:open 游标名;
打开游标实际上就是相当于执行游标所对应的查询语句,并且把查询结果集放入内存中。
(3).提取数据:(写在begin块中)
语法:fecth 游标名 into 变量名列表|记录型变量;
该语句通常是放在一个循环中
(4).关闭游标:
语法:close 游标名;
相当于释放内存。
--练习:获取部门10的所有员工的姓名和工资
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
--定义显式游标,一定要绑定一个查询语句
--游标mc中装的是查询语句的结果集
cursor mc is select ename,sal from emp where deptno=10;
begin
--打开游标[游标默认是关闭的],打开后才能够提取游标中的数据
open mc;
loop
--提取游标中的数据
--每fetch一次,就提取了一条数据
fetch mc into v_ename,v_sal;
--判断是否有数据,如果没有就退出
exit when mc%notfound;
dbms_output.put_line(v_ename||' '||v_sal);
end loop;
--关闭游标
close mc;
end;