光标的实例

2017-07-09  本文已影响0人  somertsm

光标的具体案例

按照员工的职位涨工资,总裁涨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;
/
上一篇 下一篇

猜你喜欢

热点阅读