PL/SQL游标的使用方法

--游标类型:用来表示一个结果集(多条数据)的类型
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;

 

猜你喜欢

转载自1084647490.iteye.com/blog/2258008