PL\SQL 学习小结

PL/SQL 也算是一个编程语言,跟C一样面向过程,这就需要对每一步的工程非常清楚啊,需要有一个非常清晰思路,这样写出来的SQL程序不会容易出错,在每个关键环节写上注释,能增强程序的可读性,便于后续修改;

关于思路分析需要有一个瀑布模型:

简单的PL/SQL 程序,理清思路需求,不易犯错;

--需求按部门分段统计 薪资6000以上的员工 6000-3000 3000以下的员工人数,以及各个部门员工薪资的总和
/*
需要的SQL语句:select deptno from dept部门号,员工工资,select empno,sal from emo where deptno=?(获取当前部门的员工工资)
员工的总金额 saltotal = 当前员工工资累加;也可以调用select sum(sal) from emp where deptno = ?;
在PL/SQl程序中 少量的访问数据库获取数据和累加计算,当然后者可以提高我们的效率,又可以避免频繁操作影响系统的性能
原则:能不操作数据库,就不操作数据库;
初始值 count1 count2 count3 累计计算各个区间员工的人数;
循环2次 外循环是获取部门号,内循环获取员工表

*/
set serveroutput on
declare
--部门号光标
cursor cdept is select deptno from dept;
--员工薪水光标
cursor cemp(dno number) is select sal from emp where deptno = dno;
saltotal    emp.sal%type;
psal        emp.sal%type;
pno         emp.empno%type;
count1      number;
count2      number;
count3      number;
begin 
--开启第一个光标
 open cdept;
 loop
 fetch cdept into pno;
 exit when cdept %notfound;
 count1:=0;
 count2:=0;
 count3:=0;
 psal:=0;
 saltotal:=0;
  --开启第二个员工表光标获取员工的薪水
  open cemp(pno);
  loop
  --循环开始
  fetch cemp into psal;
  exit when cemp %notfound;
  saltotal:=saltotal+psal;
  --条件判断
  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;
  --操作数据库的meg表
  insert into meg values (pno,count1,count2,count3,saltotal);
 end loop;
--关闭光标
 close cdept;
 --事务提交
commit;
dbms_output.put_line('数据输出结束');
end;
/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值