1.功能設計
某高校開發的研究生招生系統,要求設計pl/sql程式對考生的成績資料進行處理,處理的邏輯是根據每門專業課的最低分數線和總分的最低分數線自動將考生歸類為錄取考生,調劑考生和落選考生。
為此設計兩個資料表,graduate資料表存放考生成績,resut資料表存放處理結果,pl/sql程式完成的功能就是將graduate資料表的資料逐行掃瞄,根據分數線進行判斷,計算出各科總分,在result資料表中將標誌字段自動新增上"錄取"或"落選"。
2.資料表設計
--研究生表--
create table graduate(
bh number(10) not null,
xm varchar2(10) not null,
lb varchar2(10) not null,
yingyu number(4,1) not null,
zhengzhi number(4,1) not null,
zhuanye1 number(4,1) not null,
zhuanye2 number(4,1) not null,
zhuanye3 number(4,1) not null
);
--結果表--
create table "result"(
"bh" number(10) not null,
"xm" varchar2(10) not null,
"lb" varchar2(10) not null,
"yingyu" number(4,1) not null,
"zhengzhi" number(4,1) not null,
"zhuanye1" number(4,1) not null,
"zhuanye2" number(4,1) not null,
"zhuanye3" number(4,1) not null,
"totalscore" number(5,1) not null,
"flag" varchar2(4) not null
);
3.錄入資料
insert into graduate values(2003080520,'張三丰','碩士',55,56,67,78,89);
insert into graduate values(2003060555,'張翠山','碩士',66,78,78,89,92);
insert into graduate values(2003056066,'張無忌','碩士',76,67,89,90,66);
insert into graduate values(2003010989,'趙敏','碩士',45,59,74,66,56);
insert into graduate values(2003050677,'周芷若','碩士',77,67,72,87,66);
insert into graduate values(2003869401,'小昭','碩士',56,67,56,64,34);
insert into graduate values(2003340987,'阿離','碩士',68,93,64,80,56);
insert into graduate values(2003056709,'宋遠橋','碩士',90,68,81,61,67);
insert into graduate values(2003100894,'殷素素','碩士',69,73,62,70,75);
4.程式設計
/*定義過程引數*/
create or replace procedure graduateprocess
( tempzhengzhi in graduate.zhengzhi%type,
tempyingyu in graduate.yingyu%type,
tempzhuanye1 in graduate.zhuanye1%type,
tempzhuanye2 in graduate.zhuanye2%type,
tempzhuanye3 in graduate.zhuanye3%type,
temptotalscore in result.totalscore%type)as
/*定義graduaterecord為記錄型變數,臨時存放通過游標從graduate資料表中提取的記錄*/
graduaterecord graduate%rowtype;
/*定義graduatetotalscore為數值型變數,統計總分*/
graduatetotalscore result.totalscore%type;
/*定義graduateflag為字元型變數,根據結果放入"落選"或"錄取",然後寫入資料表result*/
graduateflag varchar2(4);
/*定義游標graduatecursor,存放的是所有的graduate資料表中的記錄*/
cursor graduatecursor is select * from graduate;
/*定義異常處理errormessage*/
errormessage exception;
/*開始執行*/
begin
/*開啟游標*/
open graduatecursor;
/*如果游標沒有資料,啟用異常處理*/
if graduatecursor%notfound then
raise errormessage;
end if;
/*游標有資料,指標指向第一條記錄,每執行fetch命令,就自動下移,迴圈執行到記錄提取完畢為止*/
loop
fetch graduatecursor into graduaterecord;
/*計算總分*/
graduatetotalscore := graduaterecord.yingyu + graduaterecord.zhengzhi + graduaterecord.zhuanye1
+ graduaterecord.zhuanye2 + graduaterecord.zhuanye3;
/*判斷單科和總分是否滿足錄取要求,若滿足,graduateflag變數值為"錄取",否則為"落選"*/
if(graduaterecord.yingyu >= tempyingyu and graduaterecord.zhengzhi >= tempzhengzhi and
graduaterecord.zhuanye1 >= tempzhuanye1 and graduaterecord.zhuanye2 >= tempzhuanye2 and
graduaterecord.zhuanye3 >= tempzhuanye3 and graduatetotalscore >= temptotalscore) then
graduateflag := '錄取';
else
graduateflag := '落選';
end if;
/*當游標資料提取完畢後,退出迴圈*/
exit when graduatecursor%notfound;
/*向結果資料表result中插入處理後的資料*/
insert into result values(graduaterecord.bh,graduaterecord.xm,graduaterecord.lb,
graduaterecord.yingyu,graduaterecord.zhengzhi,graduaterecord.zhuanye1,graduaterecord.zhuanye2,
graduaterecord.zhuanye3,graduatetotalscore,graduateflag);
end loop;
/*關閉游標*/
close graduatecursor;
/*提交結果*/
commit;
/*異常處理,提示錯誤資訊*/
exception
when errormessage then
dbms_output.put_line('無法開啟資料表');
/*程式執行結束*/
end;
5.執行結果,程式呼叫。
/*定義6個入口變數,分別對應graduate資料表中的專業課和總分分數線*/
declare
score1 number(4,1);
score2 number(4,1);
score3 number(4,1);
score4 number(4,1);
score5 number(4,1);
scoretotal number(5,1);
/*將分數線賦值,在這裡修改各值就代表不同的分數線*/
begin
score1 := 50;
score2 := 56;
score3 := 60;
score4 := 62;
score5 := 64;
scoretotal := 325;
/*呼叫處理過程*/
graduateprocess(score1,score2,score3,score4,score5,scoretotal);
end;
綜合運用pl/sql的設計要素,就可以設計出很多複雜的處理程式,這也是dba的一項重要任務。
資料庫 PL SQL(一)
1.pl sql簡介 pl sql也是一種程式語言,叫做過程化sql語言 procedural language sql pl sql是oracle資料庫對sql語句的擴充套件。在普通sql語句的使用上增加了程式語言的特點,所以pl sql就是把資料操作和查詢語句組織在pl sql 的過程性單元中,...
資料庫 pl sql基礎
1.語義 procedure language structure query language 2.基本語法 declare 區域性變數 資料型別 區域性變數 資料型別 預設值 區域性變數 資料型別 default 預設值 begion 執行語句 exception end 3.邏輯處理 if e...
PL SQL資料庫查詢
乙個完整的sql命令 select 和from是不可少的 select from where group by order by 3.1普通查詢 select 用於指定檢索資料庫的哪些列 from 用於指定從哪乙個表或檢視中檢索資料 select order no,contract where ro...