光標的具體案例
按照員工的職位漲工資,總裁漲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;
/