光标实现为员工涨工资

一 需求

给员工职位涨工资, 总裁涨1000 ,经理涨800, 其他员工涨400
二 设计(伪代码)
ResultSet rs = "select  empno,job from emp";
while(re.next())
{
    int eno =rs.getInt("empno");
    String job = rs.getString("job");
    if(“PERSIDENT”.equals ( job))
    {
        update emp set sal = sal +1000 where empno = eno;
    }
    else if(“MANAGER”.equals ( job))
    {
        update emp set sal = sal +800 where empno = eno;
    }
    else
    {
         update emp set sal = sal +400 where empno = eno;
     }
}
三 涨工资前数据
  1. SQL>select*from emp;
  2. EMPNO ENAME EMPJOB MGR HIREDATE SAL COMM DEPTNO
  3. -----------------------------------------------------------------------------------
  4. 7369 SMITH CLERK 790217-12月-80240020
  5. 7499 ALLEN SALESMAN 769820-2-81320030030
  6. 7521 WARD SALESMAN 769822-2-81285050030
  7. 7566 JONES MANAGER 783902-4-81617520
  8. 7654 MARTIN SALESMAN 769828-9-812850140030
  9. 7698 BLAKE MANAGER 783901-5-81605030
  10. 7782 CLARK MANAGER 783909-6-81565010
  11. 7788 SCOTT ANALYST 756619-4-87460020
  12. 7839 KING PRESIDENT 17-11月-81900010
  13. 7844 TURNER SALESMAN 769808-9-813100030
  14. 7876 ADAMS CLERK 778823-5-87270020
  15. EMPNO ENAME EMPJOB MGR HIREDATE SAL COMM DEPTNO
  16. -----------------------------------------------------------------------------------
  17. 7900 JAMES CLERK 769803-12月-81255030
  18. 7902 FORD ANALYST 756603-12月-81460020
  19. 7934 MILLER CLERK 778223-1-82290010
  20. 已选择14行。
 
四 代码
  1. --给员工职位涨工资
  2. set serveroutput on
  3. declare
  4. --定义一个光标代表给哪些员工涨工资
  5. cursor cemp isselect empno,empjob from emp;
  6. --为光标定义对应的变量
  7. pempno emp.empno%type;
  8. pjob emp.empjob%type;
  9. begin
  10. --打开光标
  11. open cemp;
  12. loop
  13. --取一个员工
  14. fetch cemp into pempno,pjob;
  15. exitwhen cemp%notfound;
  16. --判断员工职位
  17. if pjob ='PRESIDENT'then update emp set sal =sal +1000where empno = pempno;
  18. elsif pjob ='MANAGER'then update emp set sal =sal +800where empno = pempno;
  19. else update emp set sal =sal +400where empno = pempno;
  20. endif;
  21. end loop;
  22. --关闭光标
  23. close cemp;
  24. --对于oracle,默认的事务隔离级别是read committed
  25. --事务ACID
  26. commit;
  27. dbms_output.put_line('涨工资完成');
  28. end;
  29. /
 
五 涨工资后数据
  1. SQL>select*from emp;
  2. EMPNO ENAME EMPJOB MGR HIREDATE SAL COMM DEPTNO
  3. -----------------------------------------------------------------------------------
  4. 7369 SMITH CLERK 790217-12月-80280020
  5. 7499 ALLEN SALESMAN 769820-2-81360030030
  6. 7521 WARD SALESMAN 769822-2-81325050030
  7. 7566 JONES MANAGER 783902-4-81697520
  8. 7654 MARTIN SALESMAN 769828-9-813250140030
  9. 7698 BLAKE MANAGER 783901-5-81685030
  10. 7782 CLARK MANAGER 783909-6-81645010
  11. 7788 SCOTT ANALYST 756619-4-87500020
  12. 7839 KING PRESIDENT 17-11月-811000010
  13. 7844 TURNER SALESMAN 769808-9-813500030
  14. 7876 ADAMS CLERK 778823-5-87310020
  15. EMPNO ENAME EMPJOB MGR HIREDATE SAL COMM DEPTNO
  16. -----------------------------------------------------------------------------------
  17. 7900 JAMES CLERK 769803-12月-81295030
  18. 7902 FORD ANALYST 756603-12月-81500020
  19. 7934 MILLER CLERK 778223-1-82330010
  20. 已选择14行。

猜你喜欢

转载自cakin24.iteye.com/blog/2389443