一、程序设计方法

1、瀑布模型

2、SQL 语句

3、变量:

  • 初始值是多少
  • 最终值如何得到

二、综合案例

1、综合案例1

统计每年入职的员工人数

/*SQL语句select to_char(hiredate,'yyyy') from emp; -->光标-->循环-->退出条件: not found变量: 1.初始值: 2、如何得到:每年入职的员工人数:count80 number := 0;count81 number := 0;count82 number := 0;count87 number := 0;
*/
set serveroutput ondeclare--定义光标cursor cemp is select to_char(hiredate,'yyy') from emp;phiredate varchar2(4) ;--定义每年入职的员工人数count80 number := 0;count81 number := 0;count82 number := 0;count87 number := 0;
beginopen cemp;loopfetch cemp into phiredate; 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 if;end loop;close cemp;dbms_output.put_line( 'total:'||(count80+count81+count82+count87));dbms_output.put_line('1980:'||count80) ;dbms_output.put_line('1981:'||count81) ;dbms_output.put_line('1982: '||count82) ;dbms_output.put_line('1987: '||count87) ;
end;
/

2、综合案例2

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

/*
SQL语句
select empno,sal from emp order by sal;
-->光标-->循环-->退出条件: 1.工资总额> 5W; 2、%notfound变量: 1、初始值; 2、如何得到
涨工资的人数:
1、select sum(sal) into salTotal from emp;
2、涨后的工资总额=涨前的工资总额+sal*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、工资总额> 5Wexit when salTotal > 50000;--取一个员工涨工资fetch cemp into pempno, psal;--2、%notfoundexit when cemp%notfound;--涨工资update emp set sal = sal*1.1 where empno = pempno;--人数+1countEmp := countEmp + 1;--涨后的工资总额=涨前的工资总额+sal*0.1salTotal := salTotal + psal*0.1;end loop;--关闭光标close cemp;commit;dbms_output.put_line('人数: '||countEmp||' 涨后的工资总额: '||salTotal);
end;
/

3、综合案例3

用PL/SQL语言编写一段程序,实现按部门分段(6000以上、(6000,3000)、3000元以下)统计各工资段的职工人数、以及各部门的工资总额(工资总额中不包括奖金)

create table msg(deptno number,count1 number,count2 number,count3 number,saltotal number
);
/*
SQL语句
1.有哪些部门select deptno from dept-->光标-->循环-->退出条件: not found
2、部门中员工的薪水select sal from emp where deptno=? --> 带一个参数的光标--> 循环--> 退出条件: notfouncount2 number;
count3 number;每个部门的工资总额:
saltotal number;
1、 select sumsal) into saltotal from emp where deptno=???
*/
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;--每个部门的工资总额saltotal number;
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;--保存当前部门的结果-- nv1();为虑空函数insert into msg values (pdeptno, count1, count2, count3, nvl(SALTOTAL,0));end loop;--关闭部门的光标close cdept;commit;dbms_output.put_line('统计完成');
end;
/


4、综合案例4

用PL/SQL语言编写一段程序。按系(系名)分段统计(成绩小于60分,60~85分,85分以上)“大学物理”课程各分数段的学生人数,及各系学生的平均成绩。

create table msg1 (coursename varchar2(20) ,dname varchar2(20) ,count1 number,count2 number ,count3 number ,avggrade number
);
/*
QL语句
1、得到有哪些系select dno, dname from dep;-->光标-->循环-->退出条件: not found
2、得到系中,选修了“大学物理”课程学生的成绩select grade from sc where cno=(select cno from course where cname-'大学物理')and sno in (select sno from student shere dno=??);-->带一个参数的光标--> 循环--> 退出条件: notfound变量: 1.初始值2.如何得到
每个分数段的人数每个系选修了“大学物理”学生的平均成绩:
avggrade number;
1、算术运算
2、select avg(grade) into avggrade from sc where cno=select cno from course whefe cname-'大学物理')and sno in (select sno trom student where dno=??);
*/
set serveroutput on
declarecursor cdept is select dno,dname from dep;pdno dep.dno%type;pdname dep.dname%type;--成绩光标cursor cgrade(coursename varchar2, depno number)is select grade from sc where cno=(select cno from course where cname=coursename)and sno in (select sno from student where dno=depno);pgrade sc.grade%type;--每个分段的人数count1 number; count2 number; count3 number;--每个系选修了“大学物理”学生的平均成绩avggrade number;--课程名称pcourseName varchar2(20) := '大学物理';
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=pcourseName)and sno in (select sno from student where dno=pdno);--取系中,选修了大学物理的学生成绩open cgrade (pcourseName, pdno);loop--取一个学生的成绩fetch cgrade into pgrade;exit when cgrade%notfound;--判断成绩的范围if pgrade<60 then count1 :=count1+1;elsif pgrade>=60 and pgrade<85 then count2 :=count2+1;else count3:=count3+1;end if;end loop;close cgrade;--保存当前的结果-- nv1();为虑空函数insert into msg1 values (pcourseName, pdno, count1, count2,count3, avggrade);
end loop;--关闭系的光标close cdept;dbms_output.put_line('统计完成');
end;
/


Oracle数据库——PL/SQL程序设计综合案例相关推荐

  1. oracle 12c sql图形化,Oracle 12c PL/SQL程序设计终极指南

    Oracle 12c PL/SQL程序设计终极指南 作者:孙风栋;王澜;郭晓惠 出版日期:2015年06月 文件大小:11.73M 支持设备: ¥60.00在线试读 适用客户端: 言商书局 iPad/ ...

  2. oracle写SQL快捷键,Oracle数据库PL/SQL快捷键设置详解

    Oracle数据库中,PL/SQL设置快捷键的方法是本文我们主要要介绍的内容,了解了这些设置可以是我们更效率地使用Oracle数据库,接下来就让我们一起来了解一下这部分内容吧. 1.登录后默认自动选中 ...

  3. Oracle数据库PL/SQL块-存储函数和过程

    PL/SQL块 PL/SQL程序由三个块组成,即声明部分.执行部分.异常处理部分 结构如下: declare​ /*声明部分,在此声明变量,类型及游标*/begin​ /*执行部分,过程及sql语句, ...

  4. oracle查询数据都是问号,Oracle数据库PL/SQL Developer查询结果显示问号乱码的解决方法...

    PL SQL Developer,查询结果中的中文变成了一堆问号,SQL语句中的中文被提示invalid character,不能识别. 解决方法: 执行,select userenv('langua ...

  5. Oracle数据库PL SQL开发、Oracle-SQL开发习题答案

    第2章 编写简单的查询语句 练习1 1.使用两种方式查询所有员工(EMP)信息. SELECT *FROM emp;SELECT empno,ename,job,mgr,hiredate,sal,co ...

  6. oracle if函数变量,Oracle数据库——PL/SQL编程

    PL/SQL块基本结构 declare -- 声明部分 begin -- 执行部分 exception -- 异常处理部分 end; 声明部分:包含变量.常量定义,由 declare 关键字开始,如果 ...

  7. Oracle的学习心得和知识总结(八)|Oracle数据库PL/SQL语言GOTO语句技术详解

    目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<Oracle Database SQL Language Reference> 2.参考书籍:& ...

  8. Oracle数据库PL/SQL中执行存储过程

    有时生产线上问题,或者调试需要手动在pl/sql中执行存储过程,但一般不建议这么做(影响线上交易). 一.直接测试执行 在pl/sql中找到对应需要测试的存储过程,左边菜单栏:Procedures下. ...

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

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

最新文章

  1. VS2013 编译使用 stlport
  2. DPDK(Data Plane Development Kit)快速处理数据包 开发平台及接口 简介
  3. matlab radiogroup,RadioGroup和CheckBox的使用 | 学步园
  4. css 剪辑图片_CSS中的clip-path裁剪图片用法
  5. vector容器中清空元素(但原来的元素还在)
  6. html语言中bodyalink表示,HTML语言中,
  7. 【JAVA笔记——术】JAVA LIST DEL遍历方式研究
  8. ansys电力变压器模型_最佳变压器模型的超参数优化
  9. unity 素材分享
  10. 加权平均成本计算公式
  11. 差异表达基因变化倍数_重磅推出!欧易关键基因筛选报告
  12. 【VOLTE】【SRVCC】【2】 VOLTE SRVCC(SRVCC TO 3GPP2/CDMA1X)
  13. [附源码]Nodejs计算机毕业设计基于Yigo平台库房管理系统Express(程序+LW)
  14. java roundup函数_Excel函数(2)if、rand、round函数
  15. 揭秘:男人什么时候最想结婚
  16. 泰迪云课堂大数据培训平台业务介绍
  17. python_flask_路由
  18. 当代音乐杂志当代音乐杂志社当代音乐编辑部2022年第12期目录
  19. Install OIM9.1.0.1 on RHEL5.4
  20. 解决git上传文件出错[rejected] master -> master (fetch first) error: failed to push some refs to ‘

热门文章

  1. 【网页设计】29:浮动与定位
  2. 遇到与领导意见相左时这样做能让你在职场上如鱼得水
  3. 计算机专业留学动机信范文,留学动机信英文范文出国范文模板
  4. whoami - 打印当前有效的用户名称
  5. Linux下时间处理相关函数
  6. @Scheduled定时
  7. 7-48 小爱玩拼图
  8. vscode代码一保存就缩进四个空格,解决vscode缩进四个空格问题
  9. Flask 核心技术 - WTF表单、上下文、表单验证、蓝图
  10. python cookbook3笔记三