-- 接着上篇的内容

-- 显示游标4:用游标更新数据,关键字:select ... for update

select * from emp;

declare

  v_sal number;

  cursor emp_cur is select * from emp where sal<1500 for update of sal; -- 更新sal字段

begin

  for c in emp_cur

    loop

      v_sal := c.sal;

      update emp set sal = v_sal*1.2 where current of emp_cur;-- 当前游标所指的行

    end loop;

end;

--  REF游标:用于处理运行时动态地执行sql查询

declare

   type emp_ref is ref cursor; --声明一个游标类型,此处又有不同哦

   emp_cur emp_ref;-- 声明一个游标,类型是上面定义好的类型

   v_emp emp%rowtype;

   v_sal number := '&输入薪水:';

begin

   open emp_cur for 'select * from emp where sal>:s' --此处可以是字符串,也就是可以动态传值的

   using v_sal; --给占位符绑值

   loop

     fetch emp_cur into v_emp;

     exit when emp_cur%notfound;

     sopV(v_emp.ename);

   end loop;

   close emp_cur;

end;

/*

    给游标简单的做个小结

    1.游标用于处理查询结果集中的数据

    2.游标类型有:隐式游标、显式游标和 REF 游标                         

    3.隐式游标由 PL/SQL 自动定义、打开和关闭

    4.显式游标用于处理返回多行的查询

    5.显式游标可以删除和更新活动集中的行

    6.要处理结果集中所有记录时,可使用循环游标

    7.在声明 REF 游标时,不需要将 SELECT 语句与 其关联

*/