Oracle數(shù)據(jù)庫基礎(chǔ)教程第9章人民郵電出版社.ppt
《Oracle數(shù)據(jù)庫基礎(chǔ)教程第9章人民郵電出版社.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《Oracle數(shù)據(jù)庫基礎(chǔ)教程第9章人民郵電出版社.ppt(40頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
,Oracle10g數(shù)據(jù)庫應(yīng)用教程,授課教師:職務(wù):,第9章PL/SQL語言基礎(chǔ),課程描述SQL語言的全稱是結(jié)構(gòu)化查詢語言(StructureQueryLanguage),要學(xué)習(xí)數(shù)據(jù)庫編程技術(shù),必須首先了解SQL語言。PL/SQL是一種數(shù)據(jù)庫程序設(shè)計(jì)語言,是Oracle數(shù)據(jù)庫系統(tǒng)提供的擴(kuò)展SQL語言。使用PL/SQL語言可以在各種環(huán)境下對(duì)Oracle數(shù)據(jù)庫進(jìn)行訪問。,本章知識(shí)點(diǎn),PL/SQL簡介PL/SQL組件常用函數(shù),9.1PL/SQL簡介,PL/SQL語言的結(jié)構(gòu)PL/SQL示例程序,PL/SQL語言的結(jié)構(gòu),塊(Block)是PL/SQL程序中最基本的結(jié)構(gòu)。PL/SQL的塊由變量聲明、程序代碼和異常處理代碼3部分組成。DECLARE--標(biāo)記聲明部分……--此處用來定義常量、變量、類型和游標(biāo)等BEGIN--標(biāo)記程序體部分開始……--此處用來編寫各種PL/SQL語句、函數(shù)和存儲(chǔ)過程EXCEPTION--標(biāo)記異常處理部分開始……--此處用來編寫異常處理代碼END;--標(biāo)記程序體部分結(jié)束,PL/SQL示例程序,示例程序的代碼如下:SETServerOutputON;DECLARE/*聲明變量*/var_UserNameVARCHAR2(100);BEGINSELECTUserNameINTOvar_UserNameFROMUsersWHEREUserId=1;dbms_output.put_line(var_UserName);--輸出變量var_TypeNameEND;,9.2PL/SQL組件,聲明部分執(zhí)行部分異常處理部分,聲明部分,DECLARE對(duì)變量進(jìn)行聲明:DECLARE;;……;,聲明部分,常量名和變量名的定義規(guī)則:標(biāo)識(shí)符必須以字符開頭。標(biāo)識(shí)符中可以包含數(shù)字(0~9)、下劃線(_)、“$”和“#”。標(biāo)識(shí)符最大長度為30。標(biāo)識(shí)符不區(qū)分大小寫,TypeName和typename是完全相同的。不能使用PL/SQL保留字使用標(biāo)識(shí)符名,例如不能聲明變量名為DECLARE。,聲明部分,PL/SQL中常用數(shù)據(jù)類型:BLOB。二進(jìn)制大對(duì)象,可以用來保存圖像和文檔等二進(jìn)制數(shù)據(jù)。BOOLEAN。布爾數(shù)據(jù)類型,支持TRUE/FALSE值。CHAR。固定長度字符串。CLOB。字符大對(duì)象,可用來保存多達(dá)4GB的字符數(shù)據(jù)。DATE。存儲(chǔ)全部日期的固定長度字符串。LONG??勺冮L度字符串。NUMBER。可變長度數(shù)值。RAW。二進(jìn)制數(shù)據(jù)的可變長度字符串。VARCHAR2??勺冮L度字符串。,聲明部分,(1)聲明常量。聲明常量的基本格式如下:constant:=;關(guān)鍵字constant表示聲明的是常量。要聲明一個(gè)程序的版本信息常量conVersion:ConversionconstantVARCHAR2(20):=1.0.01;【例】定義變量conVersion,保存指定產(chǎn)品的版本信息。然后調(diào)用dbms_output.put_line輸出常量的值:SETServerOutputON;DECLAREconVersionconstantVARCHAR2(20):=1.0.01;BEGINdbms_output.put_line(conVersion);END;程序的運(yùn)行結(jié)果為:1.0.01,聲明部分,(2)聲明變量。聲明變量的基本格式如下:[(寬度):=];【例】聲明一個(gè)變量Database保存數(shù)據(jù)庫信息:SETServerOutputON;DECLAREDatabaseVARCHAR2(50):=Oracle10g;BEGINdbms_output.put_line(Database);END;程序的運(yùn)行結(jié)果為:Oracle10g,執(zhí)行部分,1.賦值語句【例】在程序的運(yùn)行過程中,對(duì)變量進(jìn)行賦值操作:SETServerOutputON;DECLAREDatabaseVARCHAR2(50);BEGINDatabase:=Oracle10g;dbms_output.put_line(Database);END;,執(zhí)行部分,2.條件語句IFIFTHEN……[ELSIFTHEN…………ELSE]ENDIF;,執(zhí)行部分,【例】演示IF語句的使用方法:SETServerOutputON;DECLARENumINTEGER:=-11;BEGINIFNum0THENdbms_output.put_line(正數(shù));ELSEdbms_output.put_line(0);ENDIF;END;,執(zhí)行部分,,3.分支語句CASECASEWHENTHEN值1WHENTHEN值2……WHENTHEN值nELSE值n+1END;,執(zhí)行部分,【例】使用CASE語句根據(jù)給定的整數(shù)輸出對(duì)應(yīng)的星期值:SETServerOutputON;DECLAREvarDAYINTEGER:=3;ResultVARCHAR2(20);BEGINResult:=CASEvarDAYWHEN1THEN星期一WHEN2THEN星期二WHEN3THEN星期三WHEN4THEN星期四WHEN5THEN星期五WHEN6THEN星期六WHEN7THEN星期七ELSE數(shù)據(jù)越界END;dbms_output.put_line(Result);END;,執(zhí)行部分,4.循環(huán)語句LOOP…EXIT…ENDLOOPIFTHENEXITENDIFENDLOOP;,,執(zhí)行部分,【例】LOOP…EXIT…END語句的示例程序:SETServerOutputON;DECLAREv_NumINTEGER:=1;v_SumINTEGER:=0;BEGINLOOPv_Sum:=v_Sum+v_Num;dbms_output.put_line(v_Num);IFv_Num=3THENEXIT;ENDIF;dbms_output.put_line(+);v_Num:=v_Num+1;ENDLOOP;dbms_output.put_line(=);dbms_output.put_line(v_Sum);END;,執(zhí)行部分,5.循環(huán)語句LOOP…EXITWHEN…ENDLOOPEXITWHENENDLOOP;,執(zhí)行部分,【例】用LOOP…EXITWHEN…END語句來實(shí)現(xiàn):SETServerOutputON;DECLAREv_NumINTEGER:=1;v_SumINTEGER:=0;BEGINLOOPv_Sum:=v_Sum+v_Num;dbms_output.put_line(v_Num);EXITWHENv_Num=3;dbms_output.put_line(+);v_Num:=v_Num+1;ENDLOOP;dbms_output.put_line(=);dbms_output.put_line(v_Sum);END;,執(zhí)行部分,6.循環(huán)語句WHILE…LOOP…ENDLOOPWHILELOOPENDLOOP;,執(zhí)行部分,【例】用WHILE…LOOP…ENDLOOP語句來實(shí)現(xiàn):SETServerOutputON;DECLAREv_NumINTEGER:=1;v_SumINTEGER:=0;BEGINWHILEv_Num<=3LOOPv_Sum:=v_Sum+v_Num;dbms_output.put_line(v_Num);IFv_Num<3THENdbms_output.put_line(+);ENDIF;v_Num:=v_Num+1;ENDLOOP;dbms_output.put_line(=);dbms_output.put_line(v_Sum);END;,執(zhí)行部分,7.循環(huán)語句FOR…IN…LOOP…ENDLOOPFORIN..LOOPENDLOOP;,執(zhí)行部分,【例】用FOR…IN…LOOP…ENDLOOP語句來實(shí)現(xiàn),代碼如下:SETServerOutputON;DECLAREv_NumINTEGER;v_SumINTEGER:=0;BEGINFORv_NumIN1..3LOOPv_Sum:=v_Sum+v_Num;dbms_output.put_line(v_Num);IFv_Num<3THENdbms_output.put_line(+);ENDIF;ENDLOOP;dbms_output.put_line(=);dbms_output.put_line(v_Sum);END;,異常處理部分,WHEN語句來定義異常處理:EXCEPTIONWHENTHENWHENTHEN……WHENOTHERSTHEN,異常處理部分,【例】下面是一個(gè)異常處理的例子:SETSERVEROUTPUTON;DECLARExNUMBER;BEGINx:=123;--向NUMBER類型的變量X中賦值字符串,導(dǎo)致異常EXCEPTIONWHENVALUE_ERRORTHENDBMS_OUTPUT.PUT_LINE(數(shù)據(jù)類型錯(cuò)誤);END;運(yùn)行結(jié)果為:數(shù)據(jù)類型錯(cuò)誤PL/SQL過程已成功完成,異常處理部分,【例】下面是一段與數(shù)據(jù)庫操作有關(guān)的異常處理代碼:SETSERVEROUTPUTON;DECLAREvar_UserNameVARCHAR(40);BEGINSELECTUserNameINTOvar_UserNameFROMUsersWHEREUserType=1;EXCEPTIONWHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE(沒有數(shù)據(jù));WHENTOO_MANY_ROWSTHENDBMS_OUTPUT.PUT_LINE(返回多行匹配的數(shù)據(jù));WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE(錯(cuò)誤情況不明);END;,9.3常用函數(shù),數(shù)值型函數(shù)字符型函數(shù)日期型函數(shù)統(tǒng)計(jì)函數(shù),數(shù)值型函數(shù),ABS函數(shù)返回給定數(shù)字表達(dá)式的絕對(duì)值。【例】如果要計(jì)算?4的絕對(duì)值:SETServerOutputON;BEGINdbms_output.put_line(ABS(-4));END;,數(shù)值型函數(shù),CEIL函數(shù)返回大于或等于所給數(shù)字表達(dá)式的最小整數(shù)。【例】分別對(duì)正數(shù)、負(fù)數(shù)和0計(jì)算CEIL:SETServerOutputON;BEGINdbms_output.put_line(CEIL(116.24));dbms_output.put_line(CEIL(-112.75));dbms_output.put_line(CEIL(0));END;,數(shù)值型函數(shù),FLOOR函數(shù)返回小于或等于所給數(shù)字表達(dá)式的最大整數(shù)?!纠糠謩e對(duì)正數(shù)、負(fù)數(shù)和0計(jì)算FLOOR:SETServerOutputON;BEGINdbms_output.put_line(FLOOR(116.24));dbms_output.put_line(FLOOR(-112.75));dbms_output.put_line(FLOOR(0));END;,數(shù)值型函數(shù),POWER函數(shù)返回給定表達(dá)式乘指定次方的值。【例】執(zhí)行以下命令,計(jì)算15的4次方:SETServerOutputON;BEGINdbms_output.put_line(POWER(15,4));END;,數(shù)值型函數(shù),ROUND函數(shù)返回?cái)?shù)字表達(dá)式并四舍五入為指定的長度或精度?!纠空?qǐng)執(zhí)行以下命令,注意觀察長度變化對(duì)結(jié)果的影響:SETServerOutputON;BEGINdbms_output.put_line(ROUND(123.456,2));dbms_output.put_line(ROUND(123.456,1));dbms_output.put_line(ROUND(123.456,0));dbms_output.put_line(ROUND(123.456,-1));dbms_output.put_line(ROUND(123.456,-2));dbms_output.put_line(ROUND(123.456,-3));END;,字符型函數(shù),ASCII函數(shù)返回字符表達(dá)式最左端字符的ASCII代碼值。【例】執(zhí)行以下命令,輸出字符A的ASCII碼。SETServerOutputON;BEGINdbms_output.put_line(ASCII(ABC));END;,字符型函數(shù),使用flashbacktable語句可以對(duì)表進(jìn)行閃回操作:FlashbacktableTo[beforedrop[renameto]]|[scn|timestamp][Enable|disabletriggers];LENGTH函數(shù)返回給定字符串表達(dá)式的字符(而不是字節(jié))個(gè)數(shù),其中不包含尾隨空格?!纠糠祷夭块T名稱的字符串長度:SELECTUserName,LENGTH(UserName)FROMUsersWHEREUserType=1;,字符型函數(shù),UPPER函數(shù)返回將小寫字符數(shù)據(jù)轉(zhuǎn)換為大寫的字符表達(dá)式。【例】將字符串a(chǎn)bc轉(zhuǎn)換為大寫字母:SETServerOutputON;BEGINdbms_output.put_line(UPPER(abc));END;,日期型函數(shù),SYSDATE。返回當(dāng)前日期和時(shí)間?!纠枯敵霎?dāng)前的日期信息:SETServerOutputON;BEGINdbms_output.put_line(SYSDATE);END;TO_CHAR。轉(zhuǎn)換日期為字符串?!纠繉?dāng)前日期轉(zhuǎn)換為字符串后再輸出:SETServerOutputON;BEGINdbms_output.put_line(TO_CHAR(SYSDATE));END;,日期型函數(shù),LAST_DAY。返回包含日期d的月份的最后一天的日期。這個(gè)函數(shù)可以被用來確定當(dāng)前月中還剩下多少天?!纠枯敵霎?dāng)前月份的最后一天:SETServerOutputON;BEGINdbms_output.put_line(LAST_DAY(SYSDATE));END;MONTHS_BETWEEN。返回兩個(gè)日期之間月的數(shù)目?!纠坑?jì)算2008-06-05到2008-10-05之間的月份數(shù)目:SETServerOutputON;DECLAREdate1VARCHAR2(20):=2008-06-05;date2VARCHAR2(20):=2008-10-05;BEGINdbms_output.put_line(MONTHS_BETWEEN(TO_DATE(date2,yyyy-mm-dd),TO_DATE(date1,yyyy-mm-dd)));END;,統(tǒng)計(jì)函數(shù),COUNT函數(shù)返回組中項(xiàng)目的數(shù)量?!纠拷y(tǒng)計(jì)表Users中用戶記錄的數(shù)量:SELECTCOUNT(UserName)FROMUserMan.Users;MAX。MAX函數(shù)返回表達(dá)式的最大值?!纠拷y(tǒng)計(jì)表Users中最大的用戶編號(hào):SELECTMAX(UserId)FROMUserMan.Users;MIN。MIN函數(shù)返回表達(dá)式的最小值。【例】統(tǒng)計(jì)表Users中最小的用戶編號(hào):SELECTMIN(UserId)FROMUserMan.Users;,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Oracle 數(shù)據(jù)庫 基礎(chǔ)教程 人民郵電 出版社
鏈接地址:http://www.hcyjhs8.com/p-11549550.html