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;
/    
时间: 2024-10-29 10:20:43

PLSQL语句编写步骤的相关文章

最简单的bootloader的编写步骤

最简单的bootloader的编写步骤: 1. 初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND FLASH2. 如果bootloader比较大,要把它重定位到SDRAM3. 把内核从NAND FLASH读到SDRAM4. 设置"要传给内核的参数"5. 跳转执行内核 改进:1. 提高CPU频率, 200MHZ ==> 400MHZ2. 启动ICACHE [转]韦东山 老师教学笔记

分析语句执行步骤并对排出耗时比较多的语句

mysql>set profiling=1; mysql>show profiles;mysql> set @query_id=6;Query OK, 0 rows affected (0.00 sec) mysql> select state,sum(duration) as total_R,round(100*sum(duration)/(select sum(duration) from information_schema.profiling where [email pr

PLSQL 语句学习

学习PLSQL语句的目的: 让原本在应用程序的判断结果的代码,写成sql语句,从而提高应用程序的速度: 在于存储过程 和存储函数 还有触发器之前肯定要学习PLSQL; 提高操作oracle的速度和为之后做准备; 基本语法: declare 说明部分(变量说明.光标申明.例外说明) begin 语句序列(DML 语句) exception 例外处理语句 end; / 打开输出开关; set serveroutput on / 什么是PL/SQL程序; PL/SQL (Procedure Langu

DirectShow基础编程 最简单transform filter 编写步骤

目标编写一个transform filter,功能是对图像进行翻转. 一.选择基类 从CBaseFilter派生出三个用于编写transform filter的类,分别是:CTransformFilter .CTransInPlaceFilter 和CVideoTransformFilter ,三个基类的区别可以看MSDN的说明,我们选择CTransformFilter类. 选择好基类,我们就创建一个空的DLL工程,添加三个文件,分别是:FlipFilter.h.FlipFilter.cpp和F

使用if语句编写Shell脚本

在简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程.然而,单一的顺序结构使得脚本不够智能,难以处理更加灵活的系统任务.通过正确的使用if语句,使得shell脚本具有一定的判断能力,以根据不同的条件来完成不同的任务管理. 条件测试操作 要使shell脚本具有一定的智能,就必须使其区分在不同的条件下执行哪种操作.例如,当磁盘使用率超过95%时发送告警消息等 可使用专门的测试工具test命令,对特定的条件进行测试,并根据返回值($?)来判断条件是否成立,返回值为0表

JDBC简介及JDBC编写步骤及常见API

JDBC : Java Database Connectivity,Java数据库连接.SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. JDBC就像一座桥,连接Java程序与数据库 . JDBC的简介: 驱动实际上就是现在的程序能够跟目标程序进行通信的一个接口规范,驱动中包含接口实现. 进行JDBC开发 1.学习JDBC接口规范 java.sql javax.sql 接口如何使用 2.在工程中导入 相应数据库驱动(JDBC实现) 核心JDBC接口规范

scrapy爬虫的编写步骤

scrapy的步骤: a.编写item,爬取的各个属性 b.编写spider,name 要和 scrapy crawl xxspider一致,里面编写parse的信息,就是xpath获取item的各个信息.同时获取下一个要爬取的url放入url_set()队列 c.pipeline,item的数据落地 d.setting的设置 4. 手写一个爬虫框架: 1.下载网页 2.过滤网页 3.数据落地 5. 手写一个建议爬虫的方法 1.下载网页 2.获取网页相关数据 3.数据落地 4.获取下一页地址 5

SQL语句编写注意事项

1.SQL编写注意事项 1.1 null 列 null 列使用索引是无意义的,任何包含null 值的列都不会包含在索引中.因此where 语句中的is null 或者 is not null 的语句,导致索引失效. 1.2 concat 或 || concate 或 || 是mysql 和 oracle 的字符串连接操作,如果对列进行函数操作,就会忽略索引的使用,比如下面的查询语句: -- 忽律索引 select ... from .. where first_name || '' || las

SQL语句编写注意点

1.使用英文模式下的 “`” 注意此处不是单引号 正确格式: select `user_id`,`name`,`desc` from `prv_user` 错误格式: select 'user_id','name','desc' from 'prv_user' 2.SQL语句书写,在SQL语句的引号前后留有空格,避免意外SQL语句连在一起 String sql = " select `user_id`, `name`, `desc` from `prv_user` " ; 3.在SQL