pl/sql案例
项目生命周期:
瀑布模型

拿到一个项目后,首先:分析需要用到的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案例的更多相关文章
- 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 ...
- PL/SQL重新编译包无反应案例2
在这篇"PL/SQL重新编译包无反应"里面介绍了编译包无反应的情况,今天又遇到一起案例, 在测试环境中,一个包的STATUS为INVALID,重新编译时,一直处于编译状态,检查发现 ...
- PL/SQL中的变量案例解析
1.标量: ag1: declare v_ename emp.ename%type;--自己称为单变量 begin select ename into v_ename from emp where e ...
- 百倍性能的PL/SQL优化案例(r11笔记第13天)
我相信你是被百倍性能的字样吸引了,不过我所想侧重的是优化的思路,这个比优化技巧更重要,而结果嘛,其实我不希望说成是百倍提升,“”自黑“”一下. 有一个真实想法和大家讨论一下,就是一个SQL语句如果原本 ...
- Oracle PL/SQL随堂笔记总结
1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
- 历尽磨难之PL/SQL链接Oracle数据库
说起来都是泪啊,上司布置的任务需要远程连接Oracle数据库,说实话这又是我人生中的第一次.我听到以后觉得不是什么大问题,然而我错了..错的很厉害! 我搞了一天一夜才弄好,这里面原因有很多,大体来讲还 ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- Oracle数据库之PL/SQL基础
介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer 在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql ...
随机推荐
- Java实现 LeetCode 268 缺失数字
268. 缺失数字 给定一个包含 0, 1, 2, -, n 中 n 个数的序列,找出 0 - n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [ ...
- Java实现 LeetCode 240 搜索二维矩阵 II(二)
240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. ...
- Spring Cloud 系列之 Apollo 配置中心(四)
本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Apollo 配置中心(一) Spring Cloud 系列之 Apollo 配置中心(二) Spring Clou ...
- Java基础(十一)
一.连接到服务器 telnet是一种用于网络编程的非常强大的测试工具,你可以在命令shell中输入telnet来启动它. 二.实现服务器 服务器循环体: 1.通过输入数据流从客户端接收一个命令. 2. ...
- [C#.NET 拾遗补漏]04:你必须知道的反射
阅读本文大概需要 3 分钟. 通常,反射用于动态获取对象的类型.属性和方法等信息.今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的. 获取类型的成员 Type 类的 GetMe ...
- Centos 文件系统基础命令
目录 centos7的目录结构(linux所以的都文件,万物接文件) 1 pwd 显示当前所在的路径 2 cd 切换目录结构 3 mkdir创建目录信息 4 touch 创建文件(触摸) 5 ls 检 ...
- MyBatis使用模糊查询用户信息及log4j配置文件详解
1.1 根据用户名称模糊查询用户信息 根据用户名模糊查询用户信息,只需要我们更改映射文件中的sql语句.其他的内容跟上一篇的内容是一样的 1.2添加根据用户名称模糊查询用户信息的sql语句 实例中是查 ...
- EIGRP-11-弥散更新算法-EIGRP中的本地计算和弥散计算
至此,我们已经了解了诸多概念: RD (报告距离). CD (计算距离). FD (可行距 离)和FC (可行性条件) ,在此基础上继续了解EIGRP对于拓扑变化的应对方法想必是轻松愉快的.能够导致拓 ...
- @bzoj - 1921@ [ctsc2010]珠宝商
目录 @description@ @solution@ @accepted code@ @details@ @description@ 简述版题意:给定字符串 S 与一棵树 T,树上每个点有一个字符. ...
- 关联函数-web_save_param_length
int web_save_param_length(const char * Param,const char * Base,LAST); 参数说明: Param:保存长度的参数的名称. Base:参 ...