光标的具体案例
按照员工的职位涨工资,总裁涨1000元,经理涨800元,其他人员涨400元。
代码
--按照员工的职位涨工资,总裁涨1000元,经理涨800元,其他人员涨400元。
SET SERVEROUTPUT ON
DECLARE
--定义光标代表给哪些员工涨工资
cursor cemp is select employee_id,job_title from EMPLOYEES,JOBS where EMPLOYEES.JOB_ID = JOBS.JOB_ID;
pempno EMPLOYEES.employee_id%type;
pjob JOBS.JOB_TITLE%TYPE;
BEGIN
--打开光标
open cemp;
loop
--取出一个员工
FETCH cemp into pempno,pjob;
exit when cemp%notfound;
--判断员工职位
if pjob = 'President' then update EMPLOYEES SET SALARY = SALARY - 1000 WHERE employee_id = pempno;
elsif pjob = 'Finance Manager' then update EMPLOYEES SET SALARY = SALARY - 800 WHERE employee_id = pempno;
else update EMPLOYEES SET SALARY = SALARY - 400 WHERE employee_id = pempno;
end if;
end loop;
--关闭光标
close cemp;
--对于oracle,默认的事务隔离级别是 read committed
--事务的ACID 即:原子性、一致性、隔离性、持久性
COMMIT;
DBMS_OUTPUT.PUT_LINE('涨工资完成');
end;
/