zoukankan      html  css  js  c++  java
  • 存储过程和游标

    创建一个存储过程:
    如果JOB是PRESIDENT,则SAL加1%;
    如果JOB是MANAGER,则SAL加5%;
    如果JOB是ANALYST则SAL加10%
    如果JOB是SALESMAN则SAL加20%
    如果JOB是都不是以上类别则SAL加15%
    并且要输出它们的ENAME,JOB ,进入公司的天数
    用游标累计叠加计算每个部门所需要支付的薪水,输出 DEPTNO,所支付的薪水

    set serveroutput on;
    create or replace procedure emp_job (aaa number)
    as
    var_days number;
    var_xinzi number:=0;
    cursor cur_emp is select empno,ename,job,hiredate,sal,deptno from scott.emp where deptno=aaa;
    begin
    for xuhuang in cur_emp loop
    if xuhuang.job='PRESIDENT' then
    xuhuang.sal:=xuhuang.sal*1.01;
    elsif xuhuang.job='MANAGER' then
    xuhuang.sal:=xuhuang.sal*1.05;
    elsif xuhuang.job='ANALYST' then
    xuhuang.sal:=xuhuang.sal*1.1;
    elsif xuhuang.job='SALESMAN' then
    xuhuang.sal:=xuhuang.sal*1.2;
    else xuhuang.sal:=xuhuang.sal*1.15;
    end if;
    update emp set sal=xuhuang.sal where empno=xuhuang.empno;
    commit;
    var_xinzi:=var_xinzi+xuhuang.sal;
    var_days:=trunc(sysdate,'j')-trunc(xuhuang.hiredate,'j');
    dbms_output.put_line('姓名:'||xuhuang.ename||' 工作:'||xuhuang.job||' 薪资:'||xuhuang.sal||' 入职天数:'||var_days);
    end loop;
    dbms_output.put_line('部门号:'||aaa||' 需要支付的薪资:'||var_xinzi);
    end;

    SQL> set serveroutput on;
    SQL> exec emp_job(20);

    姓名:SMITH 工作:CLERK 薪资:1058 入职天数:13067
    姓名:JONES 工作:MANAGER 薪资:3279.94 入职天数:12961
    姓名:SCOTT 工作:ANALYST 薪资:3630 入职天数:10753
    姓名:ADAMS 工作:CLERK 薪资:1454.75 入职天数:10719
    姓名:FORD 工作:ANALYST 薪资:3630 入职天数:12716
    部门号:20 需要支付的薪资:13052.69

    PL/SQL procedure successfully completed

    SQL>

  • 相关阅读:
    Python(4)
    docker-数据管理(3)
    docker(2)
    docker(1)
    ansible的role(6)
    windows实用cmd命令总结
    Orcal数据类型总结
    Orcal设置默认插入数据的日期和时间
    linux常用关机和重启命令
    electron关于页面跳转 的问题
  • 原文地址:https://www.cnblogs.com/feng666666/p/5908615.html
Copyright © 2011-2022 走看看