plsql程式案例

2021-09-26 18:13:26 字數 4463 閱讀 7573

瀑布模型

統計每年入職的員工人數

/*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 ...