游标是构建在PL/SQL中的,主要用来查询数据,获得记录集的指针.一些对数据表的复杂操作我们都可以通过游标来进行。

以下代码是在PLSQL Developer 6.0环境中运行的。为了方便,我们使用 scott/tiget登陆PL/SQL,然后拷贝好样例表:
       生成emp_copy表: create table emp_copy as select * from emp;
       生成dept_copy表:  create table dept_copy as select * from dept;

下面我们可以来进行学习了:
游标分为两种:1 静态游标    2 动态游标

静态游标: 可区分为两种:隐式游标和显示游标
      a. 隐式游标是不需要手工来声明、定义和关闭的。
           隐式游标有四个属性:%found 如果有影响到数据表的一行和多行,返回TRUE
                    %notfound 和上面相反,如果没有影响到行,返回TRUE
                     %rowcount 返回影响的行数
                    %isopen 如果游标是打开状态,返回false set serveroutput on;
begin
        update emp_copy set ename='toms' where empno=7900;
    if sql%found then
           dbms_output.put_line('表已更新了' || sql%rowcount || '行');  //输出 表已更新了1行
    else
           dbms_output.put_line('编号没有找到');
    end if;
end;
/
b. 显示游标
      显示游标需要四个步骤:声明游标->打开游标->获取数据->关闭游标
/**//*使用显示游标查询数据*/
set serveroutput on;
declare
       sals emp_copy.sal%type;
       cursor mycur is select sal from emp_copy where sal>2000; /**//*申明游标*/
begin
     open mycur;
     loop
         fetch mycur into sals; /**//*提取游标值赋予sals变量*/
         exit when mycur%NOTFOUND;//**//*如果最后一条fetch语句没有提取到行数据,则%notfound的值为true*/
         dbms_output.put_line(mycur%rowcount || '员工工资: ' || sals);
     end loop;
     close mycur;/**//*关闭游标*/
commit;
end;
/
/**//*显示游标更新行*/
set serveroutput on;
declare
       sals emp_copy.sal%type;
       cursor mycur is select sal from emp_copy where sal>2000 for update of sal;
begin
     open mycur;
     loop
         fetch mycur into sals;
         exit when mycur%notfound;
         update emp_copy set sal=sals*1.1 where current of mycur;/**//*修改游标指向的行*/
     end loop;
     close mycur;
commit;
end;
/