|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
这一切听起来不错,无疑DBaaS具有很多相对于RDBMS的优势。然而MySQL学习教程,DBaaS也有其局限性,云服务中固有的局限性就是之一。当客户开始将数据放入云端时,他们会遭遇到无法控制的网络性能问题。
本节将在后面进修的PL/SQL基本上剖析一个较庞大的实例,以教会读者编写完全的PL/SQL程序的办法。
实例计划
1.功效计划
某高校开辟的研讨生招生体系,请求计划PL/SQL程序对考生的成就数据举行处置,处置的逻辑是依据每门专业课的最低分数线和总分的最低分数线主动将考生回类为登科考生、调度考生和中选考生。
为此计划两个数据表,graduate数据表寄存考天生绩,result数据表寄存处置了局,PL/SQL程序完成的功效就是将graduate数据表中的数据逐行扫描,依据分数线举行判别,盘算出各科总分,在result数据表中将标记字段主动增加上“登科”或“中选”。
2.数据表计划
Graduate数据表布局如表9.3所示。
创立数据表
为了简化起见,实例的两个数据表都创建在默许的scott用户下,如许读者能够完整摹拟实例分歧的情况举行进修。
1.创立graduate数据表
在.58所示的创立表的【一样平常信息】选项卡中依照以下步骤举行设置。
在【称号】文本框中输出“GRADUATE”。
在【计划】下拉列表框当选择“SCOTT”。
在【表空间】下拉列表框当选择“USERS”。
在【表布局界说区】依照图所示举行设置。
完成设置后单击
按钮。
读者也能够在【SQLPlusWorksheet】中实行以下SQL代码,间接创立数据表SCOTT.GRADUATE。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
CREATETABLE"SCOTT"."GRADUATE"(
"BH"NUMBER(10)NOTNULL,
"XM"VARCHAR2(10)NOTNULL,
"LB"VARCHAR2(10)NOTNULL,
"YINGYU"NUMBER(4,1)NOTNULL,
"ZHENGZHI"NUMBER(4,1)NOTNULL,
"ZHUANYE1"NUMBER(4,1)NOTNULL,
"ZHUANYE2"NUMBER(4,1)NOTNULL,
"ZHUANYE3"NUMBER(4,1)NOTNULL)
TABLESPACE"USERS"
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序地位】:第9章creategraduate.sql。
2.创立result数据表
在.59所示的创立表的【一样平常信息】选项卡中依照以下步骤举行设置。
在【称号】文本框中输出“RESULT”。
在【计划】下拉列表框当选择“SCOTT”。
在【表空间】下拉列表框当选择“USERS”。
在【表布局界说区】依照图所示举行设置。
完成设置后单击
按钮。
读者也能够在【SQLPlusWorksheet】中实行以下SQL代码,间接创立数据表SCOTT.RESULT。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
CREATETABLE"SCOTT"."RESULT"(
"BH"NUMBER(10)NOTNULL,
"XM"VARCHAR2(10)NOTNULL,
"LB"VARCHAR2(10)NOTNULL,
"YINGYU"NUMBER(4,1)NOTNULL,
"ZHENGZHI"NUMBER(4,1)NOTNULL,
"ZHUANYE1"NUMBER(4,1)NOTNULL,
"ZHUANYE2"NUMBER(4,1)NOTNULL,
"ZHUANYE3"NUMBER(4,1)NOTNULL,
"TOTALSCORE"NUMBER(5,1)NOTNULL,
"FLAG"VARCHAR2(4)NOTNULL)
TABLESPACE"USERS"
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序地位】:第9章createresult.sql。
录进数据
使用【表数据编纂器】向SCOTT.GRADUATE数据表录进以下实行数据。如.60所示。
读者也能够在【SQLPlusWorksheet】中实行以下SQL代码,间接向数据表SCOTT.GRADUATE中录进测试数据。
【配套程序地位】:第9章insertgraduate.sql。
程序计划
1.创立处置历程scott.graduateprocess
在【SQLPlusWorksheet】中实行以下PL/SQL代码,创立处置历程scott.graduateprocess。实行了局如.61所示。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
/*界说历程参数*/
createorreplaceprocedurescott.graduateprocess(
tempzhengzhiinscott.graduate.zhengzhi%type,
tempyingyuinscott.graduate.yingyu%type,
tempzhuanye1inscott.graduate.zhuanye1%type,
tempzhuanye2inscott.graduate.zhuanye2%type,
tempzhuanye3inscott.graduate.zhuanye3%type,
temptotalscoreinscott.result.totalscore%type)as
/*界说graduaterecord为纪录型变量,一时寄存经由过程游标从graduate数据表中提取的纪录*/
graduaterecordscott.graduate%rowtype;
/*界说graduatetotalscore为数值型变量,统计总分*/
graduatetotalscorescott.result.totalscore%type;
/*界说graduateflag为字符型变量,依据了局放进“中选”或“登科”,然后写进数据表result*/
graduateflagvarchar2(4);
/*界说游标graduatecursor,寄存的是一切的graduate数据表中的纪录*/
cursorgraduatecursoris
select*fromscott.graduate;
/*界说非常处置errormessage*/
errormessageexception;
/*入手下手实行*/
begin
/*翻开游标*/
opengraduatecursor;
/*假如游标没无数据,激活非常处置*/
ifgraduatecursor%notfoundthen
raiseerrormessage;
endif;
/*游标无数据,指针指向第一笔记录,每实行fetch命令,就主动下移,轮回实行到纪录提取终了为止*/
loop
fetchgraduatecursorintograduaterecord;
/*盘算总分*/
graduatetotalscore:=graduaterecord.yingyu+graduaterecord.zhengzhi+graduaterecord.zhuanye1+graduaterecord.zhuanye2
+graduaterecord.zhuanye3;
/*判别单科和总分是不是满意登科请求,若满意,graduateflag变量值为“登科”,不然为“中选”*/
if(graduaterecord.yingyu>=tempyingyuand
graduaterecord.zhengzhi>=tempzhengzhiand
graduaterecord.zhuanye1>=tempzhuanye1and
graduaterecord.zhuanye2>=tempzhuanye2and
graduaterecord.zhuanye3>=tempzhuanye3and
graduatetotalscore>=temptotalscore)then
graduateflag:=登科;
else
graduateflag:=中选;
endif;
/*当游标数据提取终了后,加入轮回”*/
exitwhengraduatecursor%notfound;
/*向了局数据表result中拔出处置后的数据*/
insertinto
scott.result(bh,xm,lb,zhengzhi,yingyu,zhuanye1,zhuanye2,zhuanye3,totalscore,flag)
values(graduaterecord.bh,graduaterecord.xm,graduaterecord.lb,graduaterecord.zhengzhi,graduate
record.yingyu,graduaterecord.zhuanye1,graduaterecord.zhuanye2,graduaterecord.zhuanye3,graduat
etotalscore,graduateflag);
endloop;
/*封闭游标*/
closegraduatecursor;
/*提交了局*/
commit;
/*非常处置,提醒毛病信息*/
exception
whenerrormessagethen
dbms_output.put_line(没法翻开数据表);
/*程序实行停止”*/
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序地位】:第9章creategraduateprocess.sql。
2.主程序mainprocess计划
主程序挪用名为graduateprocess的历程来完成处置,代码计划以下:
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
setserveroutputon
/*界说6个出口变量,分离对应graduate数据表中的专业课和总分分数线*/
declare
score1number(4,1);
score2number(4,1);
score3number(4,1);
score4number(4,1);
score5number(4,1);
scoretotalnumber(5,1);
/*将分数线赋值,在这里修正各值就代表分歧的分数线*/
begin
score1:=50;
score2:=56;
score3:=60;
score4:=62;
score5:=64;
scoretotal:=325;
/*挪用处置历程*/
scott.graduateprocess(score1,score2,score3,score4,score5,scoretotal);
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序地位】:第9章mainprocess.sql。
在上述历程计划中,综合利用了非常处置、游标、变量等PL/SQL程序计划要素,经由过程主程序向带参数实行的历程传送参数。
实行了局
1.第一组实行了局
(1)将mainprocess.sql文件稍做修改,在【SQLPlusWorksheet】中实行以下PL/SQL程序,实行了局如.62所示。
【配套程序地位】:第9章mainprocess1.sql。
(2)使用【表数据编纂器】检察scott.result数据表的了局,如.63所示。
2.第二组实行了局
(1)将mainprocess.sql文件稍做修改,在【SQLPlusWorksheet】中实行以下PL/SQL程序,实行了局如.64所示。
【配套程序地位】:第9章mainprocess1.sql。
(2)使用【表数据编纂器】检察scott.result数据表的了局,如.63所示。
2.第二组实行了局
(1)将mainprocess.sql文件稍做修改,在【SQLPlusWorksheet】中实行以下PL/SQL程序,实行了局如.64所示。
【配套程序地位】:第9章mainprocess2.sql。
(2)使用【表数据编纂器】检察scott.result数据表的了局,如.65所示。
综合使用PL/SQL的计划要素,就能够计划出良多庞大的处置程序,这也是DBA的一项主要义务。
首先我们要知道,或许有一项技术存在很多理由让我们可以选择使用MySQL学习教程,但是让我们不使用它往往只要有一个理由就足够了。 |
|