存储过程三个例子
来源:互联网 发布:elton john 知乎 编辑:程序博客网 时间:2024/06/07 01:55
/*
实例1:统计每年入职的员工个数。
可能SQL:
select to_char(hiredate,’yyyy’) from emp;
*/
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;
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;
/
/*
为员工长工资。从最低工资调起每人长10%,但工资总额不能超过5万元,
请计算长工资的人数和长工资后的工资总额,并输出输出长工资人数及工资总额。
可能的SQL:
员工: select empno,sal from emp order by sal;
长工资后的工资总额:1. 对sal进行累加: 新的工资总额=旧的工资 + sal*0.1;
2. sum(sal): 查询数据库
练习: 工资不能超过5w
*/
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
–工资总额>5w
exit when salTotal > 50000;
–取一个员工
fetch cemp into pempno,psal;
exit when cemp%notfound;
--涨工资update emp set sal=sal*1.1 where empno=pempno;--人数countEmp := countEmp +1;--工资总额salTotal := salTotal + psal * 0.1;
end loop;
close cemp;
commit;
–输出
dbms_output.put_line(‘长工资的人数:’|| countEmp);
dbms_output.put_line(‘工资总额:’|| salTotal);
end;
/
/*
用PL/SQL语言编写一程序,实现按部门分段(6000以上、(6000,3000)、3000元以下)
统计各工资段的职工人数、以及各部门的工资总额(工资总额中不包括奖金)
SQL语句:
部门: select deptno from dept;
员工的工资: select sal from emp where deptno=???
工资总额: select sum(sal) from emp where deptno=???
*/
set serveroutput on
declare
–部门
cursor cdept is select deptno from dept;
pdno 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 pdno;
exit when cdept%notfound;
--初始化count1 :=0;count2:=0;count3:=0;select sum(sal) into salTotal from emp where deptno=pdno;--取部门中的员工open cemp(pdno);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 msg1 values(pdno,count1,count2,count3,nvl(salTotal,0));
end loop;
close cdept;
commit;
dbms_output.put_line(‘完成’);
end;
/
- 存储过程三个例子
- 数据库postgresql函数(存储过程)的三个例子
- 存储过程例子DIY
- 存储过程菜鸟例子
- 存储过程例子
- 存储过程 例子
- sqlserver 存储过程例子
- 存储过程例子
- 存储过程菜鸟例子
- 存储过程例子
- 经典存储过程例子
- oracle 存储过程例子
- 存储过程的例子.
- MySQL 存储过程例子
- 存储过程例子
- ORACLE存储过程例子
- 存储过程简单例子
- sql存储过程例子
- css实现日历的布局
- equals学习笔记
- Zigbee网关作为tcpclient示意图
- Android 自定义控件之 继承布局文件
- spring ioc原理(看完后大家可以自己写一个spring)
- 存储过程三个例子
- Unity3D研究院之深入理解Unity脚本的执行顺序(六十二)
- python调用C++编写的DLL
- Ubuntu 12.04 64bit安装flashcache
- css3手风琴效果diy
- (java)leetcode Valid Anagram
- java 利用ManagementFactory获取jvm,os的一些信息
- Spring AOP 实现原理
- 悄然潜行的百度快照