PL\SQL 学习小结
程序员文章站
2024-03-23 20:53:34
...
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;
/
上一篇: do{}while()
下一篇: JAVA基础 思维导图
推荐阅读
-
PL\SQL 学习小结
-
【oracle】初学jobs 博客分类: SQL学习问题解决 oraclejob
-
【oracle】dblink创建 博客分类: SQL学习 dblinkoracle使用
-
【oracle】dblink创建 博客分类: SQL学习 dblinkoracle使用
-
execute immediate 博客分类: pl/sql execute immediateusing
-
【oracle】初学jobs 博客分类: SQL学习问题解决 oraclejob
-
PL/SQL执行动态SQL(一) 博客分类: PL/SQL OraclePL/SQL动态SQLEXECUTE IMMEDIATE
-
基于oracle pl/sql的简单规则引擎的设计草稿 博客分类: oracle && pl/sql SQLOracle设计模式正则表达式
-
Spring AOP 学习小结 博客分类: Spring AOPSpring正则表达式JDKXML
-
监督学习算法小结(1):决策树 博客分类: 机器学习