欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PL\SQL 学习小结

程序员文章站 2024-03-23 20:53:34
...

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

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

PL\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;
/

 

相关标签: PL/SQL练习