/*
||使用游标便利员工工资
*/
declare
----声明一个变量接收员工工资
v_sal emp.sal%type;
----声明一个变量接收员工编号
v_ename emp.ename%type;
----声明一个游标
cursor cur_name
is
select ename,sal from emp;---查询所有员工工资
begin
open cur_name;----打开游标
loop
fetch cur_name into v_ename,v_sal ;-----提取游标
dbms_output.put_line('员工编号:'||v_ename||',工资:'||v_sal);
exit when cur_name%notfound;----游标里面没有查询到的内容则退出循环
end loop;
close cur_name;--关闭游标
end;
/**
||用一个游标更新一行数据
*/
declare
----声明一个变量接收员工工资
v_sal emp.sal%type;
----声明一个变量接收员工编号
v_ename emp.ename%type;
----声明一个游标
cursor cur_name
is
select ename,sal from emp where ename=upper('scott') for update of sal;---查询所有员工工资
begin
open cur_name;----打开游标
update emp set sal=1000 where ename=upper('scott') ;-----跟平时的更新没有什么区别
close cur_name;--关闭游标
end;
/**
||用一个游标更新多行数据
*/
declare
----声明一个变量接收员工工资
v_sal emp.sal%type;
----声明一个变量接收员工编号
v_ename emp.ename%type;
----声明一个游标
cursor cur_name
is
select ename,sal from emp for update of sal;---查询所有员工工资
begin
open cur_name;----打开游表
for r in cur_name loop
update emp set sal=1000 where current of cur_name;
end loop;
close cur_name;--关闭游标
end;