Chapt11 PL╱SQL程序設(shè)計 - 2012Oracle11g管理與編程基礎(chǔ)、案例代碼等資料_第1頁
Chapt11 PL╱SQL程序設(shè)計 - 2012Oracle11g管理與編程基礎(chǔ)、案例代碼等資料_第2頁
Chapt11 PL╱SQL程序設(shè)計 - 2012Oracle11g管理與編程基礎(chǔ)、案例代碼等資料_第3頁
Chapt11 PL╱SQL程序設(shè)計 - 2012Oracle11g管理與編程基礎(chǔ)、案例代碼等資料_第4頁
Chapt11 PL╱SQL程序設(shè)計 - 2012Oracle11g管理與編程基礎(chǔ)、案例代碼等資料_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

任課:***Email:***@***.大型數(shù)據(jù)庫技術(shù)(Oracle11g)歡迎全國讀者加入教材/課程討論QQ群:249449451問題探討、授課咨詢請加作者QQ:535413184使用教材(續(xù))王鵬杰等.21世紀高等教育計算機規(guī)劃教材:Oracle11g管理與編程基礎(chǔ),人民郵電出版社同時關(guān)注Oracle管理和開發(fā)兩個方面,內(nèi)容全面而基礎(chǔ)案例豐富,理論深入,兩者完美結(jié)合信息系統(tǒng)綜合案例代表性強,統(tǒng)合了Oracle管理與開發(fā)配套教學(xué)學(xué)習(xí)資源豐富價格適中(30元左右)PL/SQL程序設(shè)計1PL/SQL概述2PL/SQL的開發(fā)和運行環(huán)境3PL/SQL編程基礎(chǔ)1PL/SQL概述SQL語言第四代語言(4GL),執(zhí)行的非過程化,

例:select*fromSorderbys#;描述復(fù)雜邏輯,4GL無能為力

PL/SQLSQL語言功能過程式語言能力PL/SQL語言元素變量和類型(包括預(yù)定義的和用戶定義的)控制語句過程和函數(shù)對象類型和方法PL/SQL語言實現(xiàn)了將過程結(jié)構(gòu)與SQL的無縫集成。例:修改一個學(xué)生的專業(yè),如果沒有該學(xué)生,就插入一個新的記錄1PL/SQL概述(續(xù)1)updatestudentssetmajor=‘計算機’wheres_name=‘文華’獲取update的結(jié)果update是否成功insertintostudents(s_id,s_name,s_major)values(1009,‘文華’,‘計算機’)是否1PL/SQL概述(續(xù)2)Oracle數(shù)據(jù)庫服務(wù)器SQL語句執(zhí)行器PL/SQL引擎過程語句執(zhí)行器PL/SQLBlockPL/SQLBlockproceduralSQL2PL/SQL的開發(fā)和運行環(huán)境Oracle數(shù)據(jù)庫服務(wù)器PL/SQL引擎SQL語句執(zhí)行器過程性語句執(zhí)行器DECLAREv_newmajorVARCHAR2(10):=‘History’;v_firstnameVARCHAR2(10):=‘Scott’;v_lastnameVARCHAR2(10):=‘Urman’;……updatestudentssetmajor=v_newmajorwherefirst_name=v_last_nameandlast_name=v_last_name;……UpdatescSetgrade=100Wheres#=‘0201’Oracle數(shù)據(jù)庫服務(wù)器PL/SQL引擎SQL語句執(zhí)行器過程性語句執(zhí)行器DECLAREv_newmajorVARCHAR2(10):=‘History’;v_firstnameVARCHAR2(10):=‘Scott’;v_lastnameVARCHAR2(10):=‘Urman’;……updatestudentssetmajor=v_newmajorwherefirst_name=v_last_nameandlast_name=v_last_name;……UpdatescSetgrade=100Wheres#=‘0201’PL/SQL引擎過程語句執(zhí)行器3PL/SQL編程基礎(chǔ)PL/SQL基本塊變量聲明與賦值PL/SQL表達式PL/SQL控制結(jié)構(gòu)PL/SQL基本塊Declare

變量、常量、游標、自定義異常BeginSQL語句

--注釋

PL/SQL語句

Exception

異常發(fā)生時執(zhí)行的動作

End;塊的分類匿名塊存儲過程觸發(fā)器變量聲明與賦值變量先聲明后使用變量命名規(guī)則:以一個字母字符開頭最多包含30個字符可以包含大寫和小寫字母、數(shù)字以及_、$、#及其它特殊字符。PL/SQL基本數(shù)據(jù)類型數(shù)字型

BINARY_INTEGER與PLS_INTEGERPLS_INTEGER速度快單溢出會出現(xiàn)錯誤

NUMBER[(precision[,scale])]字符串型

CHAR[(maximum_length)]VARCHAR2(maximum_length)

LONGDATEBOOLEANLONGRAW函

數(shù)說

明轉(zhuǎn)換前的類型TO_CHAR轉(zhuǎn)換成VARCHAR2類型數(shù)字型,日期型TO_DATE轉(zhuǎn)換成DATE類型字符型TO_NUMBER轉(zhuǎn)換成NUMBER類型字符型CHARTOROWID將ROWID的字符表示轉(zhuǎn)換成內(nèi)部的二進制格式表示ROWID的18個字符串ROWIDTOCHAR將內(nèi)部二進制ROWID轉(zhuǎn)換為18字符的外部格式內(nèi)部二進制形式的ROWIDRAWTOHEX將RAW型值轉(zhuǎn)換成十六進制表示RAWHESTORAW將十六進制值轉(zhuǎn)換成二進制表示十六進制的字符PL/SQL數(shù)據(jù)類型之間轉(zhuǎn)換自動類型轉(zhuǎn)化:

字符和數(shù)字(字符→數(shù)字、數(shù)字→字符)

字符和日期(字符→日期、日期→字符)PL/SQL可自動轉(zhuǎn)換的數(shù)據(jù)類型

每一行只能聲明一個變量,以下的聲明是錯誤的:DECLARE

v_newmajor,v_firstnameVARCHAR2(10);正確的聲明為:DECLARE

v_newmajorVARCHAR2(10);v_firstnameVARCHAR2(10);PL/SQL變量聲明變量名類型〔constant〕[notnull][:=value];SQL>DECLARE2v_newmajorVARCHAR2(10):='History';3v_firstnameVARCHAR2(10):='Scott';4v_lastnameVARCHAR2(10)default'Urman';5BEGIN6dbms_output.PUT_LINE(v_newmajor);7End;8/History

PL/SQLproceduresuccessfullycompleted.PL/SQL變量的初始化在變量聲明時對變量進行初始化賦值::=defaultSQL>DECLARE2v_newmajorVARCHAR2(10)notnull:='History';3v_firstnameVARCHAR2(10)notnull:='Scott';4v_lastnameVARCHAR2(10)default'Urman';5BEGIN6dbms_output.PUT_LINE(v_newmajor);7End;8/History

PL/SQLproceduresuccessfullycompleted.變量聲明為notnull必須指定默認值Constant變量不可更改SQL>DECLARE2v_newmajorconstantVARCHAR2(10):='Constant';3v_firstnameVARCHAR2(10);4BEGIN5v_newmajor:='test';6dbms_output.PUT_LINE(v_newmajor);7END;8/v_newmajor:='test';*ERRORatline5:ORA-06550:line5,column4:PLS-00363:expression'V_NEWMAJOR'cannotbeusedasanassignmenttargetORA-06550:line5,column4:PL/SQL:Statementignored%TYPE和%ROWTYPE使用%TYPE聲明變量的類型,保證該變量與表中某字段的數(shù)據(jù)類型一致。例:Declarev_SnoS.Sno%type;使用%ROWTYPE聲明變量的數(shù)據(jù)類型,保證該變量與表結(jié)構(gòu)類型一致。例:Declarev_SS%rowtype;變量的作用域和可見性變量的作用域是可訪問該變量的程序區(qū)域。一般從該變量聲明到塊結(jié)束。變量超出作用域,其存儲空間會被釋放變量的可見性始終在作用域內(nèi)。同名多層變量,內(nèi)層覆蓋外層。變量的作用域和可見性

SQL><<outer>>2Declare3v_testbinary_integerdefault100;4Begin5--(1)6declare7v_testchar(10)notnull:='IN';8v_testDatedate;9begin10--(2)11dbms_output.put_line(v_test);12end;13--(3)14dbms_output.put_line(v_test);15End;16/IN100

PL/SQLproceduresuccessfullycompleted.binary_integer的v_testbinary_integer的v_test可見v_testDate和Char(10)的v_test,通過outer.v_test引用binary_integer的v_testPL/SQL表達式賦值語法:變量:=表達式;一個PL/SQL語句中僅能夠有一個賦值。下面的例子是錯誤的。v_newmajor:=v_firstname:=‘test’;表達式表達式作為一個句子是無效的,它必須是一條語句的一部分,是右值。優(yōu)先級運算符描述1**乘方2+、-正負號3*、/乘除4+、-、||加減、字符串連接5=、<、>、<=、>=、!=、isnull、like、betweenand、in比較6Not邏輯非7And邏輯與8Or邏輯或運算符的優(yōu)先級布爾表達式求值為布爾值(TRUE、FALSE、NULL)的表達式叫布爾表達式Like、betweenand、in、>、<、=等返回的值為boolean類型。不能用關(guān)系運算符對NULL值進行檢測。只能用isNULL運算符去進行檢測PL/SQL控制結(jié)構(gòu)(條件控制)IF-THEN語句

ifmaxValue<athenmaxValue:=a;endifIF語句嵌套ifa=0then

ifb<athen

b:=b+1;

endif;Endif;IF-THEN-ELSE語句ifa>bthenmaxValue:=a;ElsemaxValue:=b;Endif;IF-THEN-ELSIF語句IfaisNULLorbisNULLthendbms_output.put_line(‘有一個值為空’);Elsifa>bthen

maxValue:=a;Else

maxValue:=b;Endif;PL/SQL控制結(jié)構(gòu)(條件控制續(xù)1)Declaregradebinary_integer:=90;beginifgradebetween90and100thendbms_output.put_line(‘優(yōu)秀’);

elsifgradebetween80and89then

dbms_output.put_line(‘良好’);

elsifgradebetween70and79then

dbms_output.put_line(‘中等’);

elsifgradebetween60and69then

dbms_output.put_line(‘及格’);

elsifgradebetween0and59then

dbms_output.put_line(‘不及格’);

endif;End;PL/SQL控制結(jié)構(gòu)(條件控制續(xù)2)普通case語句語法:Caseselector

whenexpression1thenstatement1;

whenexpression2thenstatement2;

......

whenexpressionNthenstatementN;

[elsestatementN+1;]EndcaseDeclaregradebinary_integer:=90;Begincasegradewhenbetween90and100thendbms_output.put_line(‘優(yōu)秀’);whenbetween80and89thendbms_output.put_line(‘良好’);whenbetween70and79thendbms_output.put_line(‘中等’);whenbetween60and69thendbms_output.put_line(‘及格’);whenbetween0and59thendbms_output.put_line(‘不及格’);elsedbms_output.put_line(‘沒有此成績’);endcase;End;PL/SQL控制結(jié)構(gòu)(條件控制續(xù)3)PL/SQL控制結(jié)構(gòu)(條件控制續(xù)4)搜索case語句語法:Casewhencondition1thenstatement1;whencondition2thenstatement2;…whenconditionNthenstatementN;[elsestatementN+1;]ENDCASEPL/SQL控制結(jié)構(gòu)(條件控制續(xù)5)Declaregradebinary_integer:=90;Begincasewhengradebetween90and100thenbms_output.put_line(‘優(yōu)秀’);whengradebetween80and89thendbms_output.put_line(‘良好’);whengradebetween70and79thendbms_output.put_line(‘中等’);whengradebetween60and69thendbms_output.put_line(‘及格’);whengradebetween0and59thendbms_output.put_line(‘不及格’);elsedbms_output.put_line(‘沒有此成績’);endcase;End;PL/SQL控制結(jié)構(gòu)(循環(huán)控制)loop-exit-end循環(huán)i:=10;Loopi:=i-1;ifi<=0thenexit;endif;Endloop;PL/SQL控制結(jié)構(gòu)(循環(huán)控制續(xù)1)loop-exit-when-end循環(huán)Declareibinary_integer:=10;beginLoopi:=i-1;exitwheni<=0;endloop;End;PL/SQL控制結(jié)構(gòu)(循環(huán)控制續(xù)2)while-loop循環(huán)Declareibinary_integer:=10;beginwhilei>=0loopdbms_output.put_line(i);i:=i-1;endloop;End;PL/SQL控制結(jié)構(gòu)(循環(huán)控制續(xù)3)for循環(huán)Forloop_counterin[reverse]low_bound..high_boundloop..Endloop;SQL>Declare2v_counternumber:=7;3Begin4insertintotestvalues(v_counter);5forv_counterin20..30loop6insertintotestvalues(v_counter);7endloop;8insertintotestvalues(v_counter);9End;10/PL/SQLproceduresuccessfullycompleted.PL/SQL控制結(jié)構(gòu)(循環(huán)控制續(xù)4)補充內(nèi)容1:字符比較(填充格式)填充格式使用下面的語法(string1和string2比較)1)如果string1和string2長度不同,則在較短的字符串上填充空格,使得兩個字符串的長度相同。2)逐個字符比較字符串,從左邊開始,假設(shè)string1的字符是char1,string2的字符是char2。3)如果ASCII(CHAR1)<ASCII(CHAR2),則string1<string2如果ASCII(CHAR1)>ASCII(CHAR2),則string1>string2如果ASCII(CHAR1)=ASCII(CHAR2),則繼續(xù)比較下一字符。4)如果達到了字符串的末尾,則認為兩個字符串是相同的補充內(nèi)容1:字符比較(填充格式續(xù))使用填充格式比較語意,則下面的條件都返回TRUE:‘a(chǎn)bc’=‘a(chǎn)bc’‘a(chǎn)bc‘=‘a(chǎn)bc’‘a(chǎn)b’<‘a(chǎn)bc’‘a(chǎn)bcd’>’abcc’補充內(nèi)容1:字符比較(非填充格式)非填充格式的比較算法如下:1)逐個字符比較字符串,從左邊開始,假設(shè)string1的字符是char1,string2的字符是char2。2)如果ASCII(CHAR1)<ASCII(CHAR2),則string1<string2如果ASCII(CHAR1)>ASCII(CHAR2),則string1>string2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論