Oracle教程
Oracle练习题

Oracle游标

我们有时采用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;