PLSQL语句编写步骤

1.SQL语句

2.变量:  1.初始值, 2.最终得到

3.题目如下:

 实例1:统计每年入职的员工个数

 SQL语句:

 select to_char(hiredate,'yyyy') from emp;

 -->集合-->光标-->循环-->退出条件:notfound

 变量:  1.初始值, 2.最终得到

 count80 number :=0;

 count81 number :=0;

 count82 number :=0;

 count87 number :=0; 

set serveroutput on

declare
    cursor cemp is select to_char(hiredate,'yyyy') from emp;
    phiredate varchar2(4);

    --每年入职的员工人数:
    count80 number :=0;
   count81 number :=0;
   count82 number :=0;
   count87 number :=0;

begin
     open cemp;
     loop
        --取一个员工的入职年份
        fetch cemp into phiredate;
        --退出条件:not found
        exit when cemp%notfound;

        --判断年份
        if  phiredate ='1980' then count80:=count80+1;
             elsif  phiredate ='1981' then count81:=count81+1;
             elsif  phiredate ='1982' then count82:=count82+1; 
             else count87:=count87+1;
     end loop;
     close cemp;

     dbms_output.put_line('Total:'||(count80+count81+count82+count87))
     dbms_output.put_line('count81:'||count81)
     dbms_output.put_line('count82:'||count82)
     dbms_output.put_line('count87:'||count87)
end;
/

    实例2:为员工涨工资

    从最低工资调起每人涨10%,但工资总额不能超过5万元,请计算涨工资的人数和涨工资后的工资总额,并输出涨工资人数及工资总额。

    分析:

         SQL语句:select empno,sal from emp order by sal;

            --->光标--->退出:1.总额>5w      2.notfound

    变量:1.初始值      2.最终得到

        涨工资的人数:countEmp number :=0;

        涨后的工资总额:salTotal number;

        1.select sum(sal) from salTotal from emp;

        2.涨后=涨前*0.1

set serveroutput on
declare
    cursor cemp is select empno,sal from emp order by sal;
    pempno  emp.empno%type;
    psal  emp.sal%type;
    --涨工资的人数:
    countEmp number :=0;
    -- 涨后的工资总额:
    salTotal number;
begin
    --得到初始的工资总额
    select sum(sal) into salTotal from emp;

    open cemp;
    loop
        --1.总额>5w
        exit  when salTotal>50000;
        --取一个员工
        fetch cemp into pempno,psal;
        --2.notfound
        exit when cemp%notfound
         
       --涨工资(涨工资之前进行判断一下,如果多于50000就不涨)

       update emp set sal =sal*1.1  where empno =pempno;
       --人数+1
       countEmp :=countEmp +1;
       --2.涨后=涨前+sal*0.1(当没有必要进行操作数据库时就不进行操作)
       salTotal :=salTotal+psal*0.1
    end loop;
    close cemp;
    
    commit;
    dbms_output.put_line('人数:'||countEmp||'总金额:'salTotal)
end;
/

  实例3:实现按部门分段(6000以上,(6000,3000),3000以下)统计各工资段的职工人数,以及各部门的工资总额

  SQL语句:

    部门:select deptno from dept;    

      部门中员工的薪水:select sal from emp where deptno =???

  变量:1.初始值       2.最终得到

  每个段的人数:

  count1 number; count2 number ;count3 number

  部门的工资总额: salTatal number :=0

  1,select sum(sal) into salTotal from emp where deptno=???

  2.将部门当中所有员工的薪水都加起来   

  

set serveroutput on
declare
    --部门(定义光标就要定义变量)
    cursor cdept is select deptno from dept;
    pdeptno dept.deptno%type;

    --部门中员工的薪水
    cursor cemp(dno number) is select sal from emp where deptno =dno;
    psal emp.sal%type;

    --每个段的人数:
  count1 number; count2 number ;count3 number
  --部门的工资总额: 
    salTatal number :=0
begin
    open cdept;
    loop
        --取一个部门(取完就应该想到退出条件)
        fetch cdept into pdeptno;    
        exit when cdept%notfound;
        
        --初始化
        count1:=0;count2:=0;count3:=0;
        --部门的工资总额
        select sum(sal) into salTotal from emp where deptno = pdeptno

        --取部门中员工的薪水
        open cemp(pdeptno);
        loop         
            fetch cemp into psal;
            exit when  cemp%notfound;

            --判断
            if psal<3000 then count1:=count1+1;
              elsif psal>=3000  and psal<6000 then count2:=count2+1
               else count3:=count3+1
            end if;
        end loop;
        close cemp;

        --保存结果
        insert into msg values(pdeptno,count1,count2,count3,nvl(saltotal,0))
    end loop;
    close cdept;

    commit;
    dbms_output.put_line('完成')
end;
/    

 

转载于:https://www.cnblogs.com/glblog/p/5987229.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值