项目生命周期:

瀑布模型

拿到一个项目后,首先:分析需要用到的SQL语句;

其次:分析需要定义的变量初始值是多少,怎么得到最终值;

案例一:

统计每年入职的员工数量以及总数量:

  SQL语句:select to_char(hiredate,'yyyy') from emp;--to_char(hiredate,'yyyy') :hiredate原本的格式是yyyy-mm-dd但是我们只需要年份,则强制转换为char型,并且格式为yyyy,强制转换语法:to_                       目的类型(目标字段,格式)

需要遍历整个表,那么需要用到光标->循环->退出条件:%notfound

变量:phiredate varchar2(20)

计数器:

count80 number := 0;

count82 number := 0;

count87 number := 0;

count89 number := 0;

set serveroutput on;

declare

cursor c is select  to_char(hiredate,'yyyy') from emp;--定义光标

phiredate varchar2(20);

count80 number := 0;

count82 number := 0;

count87 number := 0;

count89 number := 0;

begin

open c;--打开光标

loop

fetch c into phiredate ;--取出员工的入职年份

exit when c%notfound;--关闭循环的条件

if phiredate= '1980'  then   count80 number := count80+ 1;

elsif  phiredate= '1982'  then   count82 number := count82+ 1;

elsif  phiredate= '1987'  then   count87 number := count87+ 1;

else     count87 number := count87+ 1;

end if;

end loop;

close c;

dbms_output.put_line('tatal:'||count80+count82+count87+count89)

end;

/

案例二

  SQL语句:select no,sal from emp;

需要遍历整个表,那么需要用到光标->循环->退出条件:%notfound

变量:pno emp.no%type;

psal emp.sal%type;

涨工资人数:countemp number := 0;

涨后的工资总额:saltotal number;

select sum(sal) into saltotal from emp;

涨后的工资总额 = 涨前的工资总额 + sal*0.1;

set serveroutput on

declare

cursor c is select empno,sal from order by sal;

pno emp.no%type;

psal emp.sal%type;

countemp number := 0;--涨工资的人数

saltatol number;--涨后的工作总额

begin

select sum(sal) into saltatol from emp;--涨工资前的初始值

open c;

loop

exit when saltotal >50000;

fetch c into pno,psal;

exit when c%notfound;

update emp set sal := sal*1.1 where no = pno;--涨工资

countemp :=  countemp + 1;--人数+1

end loop;

close c;

commit;

dbms_output.out_put('人数= '||countepm||',涨后的工资总额:'||saltatol);

end:

/

案例三

实现部门分段(6000分以上,6000》且3000《,3000以下)统计各工资段的职工人数,以及各部门的工资总额(不包括奖金)

首先需要创建存储结果的表msg:create table msg(deptno number;count1 number;count2 number;  count3 number;saltotal number);

set serveroutput on

declare

cursor cdept is select deptno from dept;--部门的光标

pdeptno dept.deptno %type;--部门光标对应的变量

cursor cemp(deptno) is select sal from emp where no = deptno;--部门工资的光标

psal emp.sal %type;--部门工资光标对应的变量

count1 number;count2 number;count3 number;--每个阶段员工计数器

begin

open cdept;

loop

fetch cdept into pdeptno;--取出一个部门

exit when cdepy%notfound;

count1 :=0;count2 :=0;count3 :=0;--初始化计数器

select sum(sal) into saltatol from emp where deptno = pdeptno;--计算部门工资总额

open cemp(pdeptno)

loop

fetch cemp into psal;--取出每一个员工的薪资

exit when cemp%noufound;

if psal <3000 then count1 := count1 +1;--判断工资范围

elsif  psal>6000 then count3 := count3 +1;

else count2 := count2 +1;

end if;

end loop;

close cemp;

insert into  msg value(pdeptno,count1,count2,count3,saltatol);--保存当前部门的结果

end loop;

close cdept;

end:

/

案例四

按照系分段统计(成绩小于60,大于85,中间段)课程为‘大学物理’各个分数段的学生人数,以及各系学生的平均成绩;

set serveroutput on

declare

cersor cdept is select dno ,dname from dep;

pdno dep.dno%type;

cursor cgrade(coursename varchar2,depno number) is select grade from sc where cno =  (select cno from course where cname = courname) and sno in (select sno from student where dno = depno)--成绩光标

pgrade sc.grade % type;

count1 number;count2 number;count3 number;--每个分数段人数计数器

avggrade number;--平均成绩

pcoursename varchar2 :='大学物理';

begin

open cdept;

loop

fetch cdept into pdno,pdname;

exit when cdept%notfound;

count1 :=0;count2 :=0;count3 :=0;--初始化计数器

select avg(grade) into avggrade from sc where cno =  (select cno from course where cname = courname) and sno in (select sno from student where dno = depno)

open cgrade (pcoursename,pdno);

loop

fetch cgrade into pgrade;

exit when cgrade %notfound;

if psal <60 then count1 := count1 +1;--判断工资范围

elsif  psal>85 then count3 := count3 +1;

else count2 := count2 +1;

end if;

end loop;

end loop;

close cgrade;

insert into msg value (pcoursename,count1,count2,count3,avggrade);

end loop;

close cdept;

commit;

dbms_output.put_line('统计完成');

end:/

pl/sql案例的更多相关文章

  1. Oracle+PL+SQL从入门到精通.丁士锋.清华大学出版社.2012

    \t第1篇 pl/sql开发入门第1章 oracle 11g数据库系统1.1 关系型数据库系统介绍1.1.1 什么是关系型数据模型1.1.2 数据库系统范式1.1.3 关系型数据库管理系统1.1.4 ...

  2. PL/SQL重新编译包无反应案例2

    在这篇"PL/SQL重新编译包无反应"里面介绍了编译包无反应的情况,今天又遇到一起案例, 在测试环境中,一个包的STATUS为INVALID,重新编译时,一直处于编译状态,检查发现 ...

  3. PL/SQL中的变量案例解析

    1.标量: ag1: declare v_ename emp.ename%type;--自己称为单变量 begin select ename into v_ename from emp where e ...

  4. 百倍性能的PL/SQL优化案例(r11笔记第13天)

    我相信你是被百倍性能的字样吸引了,不过我所想侧重的是优化的思路,这个比优化技巧更重要,而结果嘛,其实我不希望说成是百倍提升,“”自黑“”一下. 有一个真实想法和大家讨论一下,就是一个SQL语句如果原本 ...

  5. Oracle PL/SQL随堂笔记总结

    1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...

  6. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  7. 历尽磨难之PL/SQL链接Oracle数据库

    说起来都是泪啊,上司布置的任务需要远程连接Oracle数据库,说实话这又是我人生中的第一次.我听到以后觉得不是什么大问题,然而我错了..错的很厉害! 我搞了一天一夜才弄好,这里面原因有很多,大体来讲还 ...

  8. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  9. Oracle数据库之PL/SQL基础

    介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer 在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql ...

随机推荐

  1. Java实现蓝桥杯有歧义的号码

    描述 小Hi参加了一场大型马拉松运动会,他突然发现面前有一位参赛者背后的号码竟然和自己一样,也是666.仔细一看,原来那位参赛者把自己号码帖反(旋转180度)了,结果号码999看上去变成了号码666. ...

  2. java实现海盗比酒量

    ** 海盗比酒量** 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复- 直到开了第4瓶酒,坐着的已经所剩 ...

  3. .gitignore文件详细说明

    简介 有些时候,你必须把某些文件放到 Git 工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件.Java编译生成的.class文件.处理这个需求很简单,从不git add它们就可以.但这样 ...

  4. Python快速入门文档

    前言 此文本质为本人学习Python过程中的笔记,部分地方叙述表达可能不够清晰,欢迎留言. (本文适合有一定程序语言基础的读者阅读(最好是c语言)) 一.基本语法 1.框架: (1)以缩进表示层次所属 ...

  5. zabbix内存百分比监控告警

    本文结合配置内存不足10%触发报警的需求,zabbix给我们提供的模板,里面都已经配置好了item和trigger.但是给我们的模板是当内存小于20M的时候才会触发报警,这样不能满足我们的需求,我们需 ...

  6. layui导出表格的两种方法

    一.不熟悉layui小白使用方法 1.引入如下js文件: 2.编写如下函数: 3.表格ID要与函数取值保持一致即可,再就是自定义一个按钮触发事件 二.引入插件使用方法 1.layui官网下载插件包: ...

  7. 1.Go 开始搞起

    link 1. IDE Go Land 服务器激活 2. 资源 中文网站 翻译组 翻译组wiki 待认领文章 入门指南 中文文档 fork 更新 github 中如何定期使用项目仓库内容更新自己 fo ...

  8. abstract class 和 interface 有什么区别?

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract 类的实例.然 ...

  9. CentOS6.5 开机启动自动运行redis服务

    [一].查找和设置自己的redis路径参数 环境变量 PATH=/usr/local/bin:/sbin/:/usr/bin:/bin 端口 REDISPORT=6379 文件位置 EXEC=/usr ...

  10. 键盘鼠标共享效率工具----Synergy

    在日常工作中,为了提高工作效率以及用户体验,会一个主机接多个显示器,像程序员一般都是使用两块显示器. 然而,有很多人是和我一样,自己有多台电脑,两个笔记本.公司一个台式机,如何在台机器之间来回切换工作 ...