我们有时采用select会返回一个结果集,使用简单的select无法得到上一行,下一行,后5行,后10行,如果想做到这一点必须使用游标,游标是存储在数据库服务器上的一个数据库查询,它不是一条select语句,他是一个结果集,有了游标就可以根据需要滚动浏览数据了。
下面通过一个示例,根据岗位加工资,如果是MANAGER增加20%的工资,如果是SALESMAN增加10%的工资,其他的增加5%的工资。
把For update语句对数据的锁定叫行级锁。
create or replace procedure proc_sal
is
cursor c is
select * from emp for update;
begin
for v_emp in c loop
if (v_emp.job = 'MANAGER') then
update emp set sal = sal + sal*0.2 where current of c;
elsif (v_emp.job = 'SALESMAN') then
update emp set sal = sal + sal*0.1 where current of c;
else
update emp set sal = sal + sal*0.05 where current of c;
end if;
end loop;
commit;
end;
Select 语句的for update操作会对查询结果集的数据进行加锁。
执行存储过程
exec proc_sal;