瀑布模型
統計每年入職的員工人數
/*sql語句
select to_char(hiredate,'yyyy') from emp;
->游標->迴圈->退出條件:notfound
變數:1.初始值 2.如何得到
每年入職的員工人數:
count80 number := 0;
count81 number := 0;
count82 number := 0;
count87 number := 0;
*/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;
total:14
1980:1
1981:10
1982:1
1987:2
員工漲工資問題
/*從最低工資漲起每人漲10%,但工資總額不能超過10萬元,
請計算漲工資的人數和漲工資後的工資總額,
並輸出漲工資人數及工資總額。
sql語句
select empno,sal from emp order by sal;
->游標->迴圈->退出條件:1.工資總額大於10w,2.%notfound
變數:1.初始值 2.如何得到
漲工資的人數:
countemp number := 0;
漲後的工資總額
saltotal number;
1.select sum(sal) into saltotal from emp;
2.漲後的工資總額=漲前的工資總額 + sal * 0.1
*/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
exit when cemp%notfound;
fetch cemp into pempno,psal;
exit when saltotal + psal*0.1 > 100000;
--漲工資
update emp set sal=sal*1.1 where empno=pempno;
--人數+1
countemp := countemp + 1;
--漲後的工資總額=漲前的工資總額+sal*0.1
saltotal := saltotal + psal*0.1;
end loop;
--關閉游標
close cemp;
commit;
dbms_output.put_line('人數:'||countemp||' 漲後的工資總額:'||saltotal);
end;
涉及兩張表的員工漲工資問題
create table msg
2 (deptno number,
3 count1 number,
4 count2 number,
5 count3 number,
6 saltotal number);
/*實現按部門分段(6000以上、(6000,3000)
、3000元以下)統計各工資段的職工人數、以及各部門的工資總額
(工資總額中不包括獎金)。
sql語句
1.有哪些部門
select deptno from dept;
->游標->迴圈->退出條件:notfound
2.部門中員工的薪水
select sal from emp where deptno=?->帶乙個引數的游標->迴圈->退出條件:notfound
變數:1.初始值 2.如何得到
每個段的員工人數:
count1 number := 0;
count2 number := 0;
count3 number := 0;
每個部門的工資總額
saltotal number;
1.select sum(sal) into saltotal from emp where deptno=???;
2.累加
*/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;
--儲存當前部門的結果
insert into msg values(pdeptno,count1,count2,count3,nvl(saltotal,0));
end loop;
--關閉部門的游標
close cdept;
commit;
dbms_output.put_line('統計完成');
end;
PL SQl之案例集錦
運用瀑布模型完成pl sql程式設計 1 2 變數 1 初始值是多少 統計每年入職的員工人數 2 sql語句 游標 迴圈 退出條件 notfound 每年入職的員工人數 count81 number 0 count87 number 0 set serveroutput oncursor cemp ...
PL SQL程式簡要
declare 宣告變數 test integer 0 test1 varchar2 100 field1 yourtable.tablefield type 變數型別 char character string rowid nchar 定長 varchar2 varchar,string nvar...
pl sql 使用游標屬性,案例
使用游標 1 顯示游標 cursor name cursor is select statement 2 開啟游標 open name cursor 3 提取游標 fetch name cursor into variable1,variable2.4 關閉游標 close name cursor ...