declare cursor grade_cursor is --select e.empno, e.ename, e.sal, d.loc, s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal --select e.ename, e.sal, d.loc, s.grade from emp e , dept d , salgrade s where e.deptno = d.deptno and e.sal between s.losal and s.hisal select e.empno, e.ename, e.sal, (select d.loc from dept d where d.deptno = e.deptno) as loc, (select s.grade from salgrade s where e.sal between s.losal and s.hisal) as grade from emp e for update;
v_row grade_cursor%rowtype; v_bonus emp.bonus%type;
begin
open grade_cursor; loop fetch grade_cursor into v_row; exit when grade_cursor%notfound; if v_row.loc = 'NEW YORK' and v_row.grade = 2 then v_bonus := 9000; elsif v_row.loc = 'DALLAS' and v_row.grade = 1 then v_bonus := 8000; elsif v_row.loc = 'CHICAGO' and v_row.grade = 2 then v_bonus := 7000; else v_bonus := 5000; end if; update emp set bonus = v_bonus where current of grade_cursor; end loop; commit; close grade_cursor; end; /
select * from emp; |