LSQL-清華大學(xué)計(jì)算中心ORACLE培訓(xùn)資料.ppt
《LSQL-清華大學(xué)計(jì)算中心ORACLE培訓(xùn)資料.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《LSQL-清華大學(xué)計(jì)算中心ORACLE培訓(xùn)資料.ppt(28頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
《Oracle9iPL/SQL程序設(shè)計(jì)》,ProceduralLanguage,,《PL/SQL程序設(shè)計(jì)》,2,PL/SQL概述,PL/SQL是Oracle對(duì)關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL的過(guò)程化擴(kuò)充,它將數(shù)據(jù)庫(kù)技術(shù)和過(guò)程化程序設(shè)計(jì)語(yǔ)言聯(lián)系起來(lái),是一種應(yīng)用開發(fā)語(yǔ)言,可使用循環(huán),分支處理數(shù)據(jù),將SQL的數(shù)據(jù)操縱功能與過(guò)程化語(yǔ)言數(shù)據(jù)處理功能結(jié)合起來(lái).PL/SQL的使用,使SQL成為一種高級(jí)程序設(shè)計(jì)語(yǔ)言,支持高級(jí)語(yǔ)言的塊操作,條件判斷,循環(huán)語(yǔ)句,嵌套等,與數(shù)據(jù)庫(kù)核心的數(shù)據(jù)類型集成,使SQL的程序設(shè)計(jì)效率更高.PL/SQL是一種塊結(jié)構(gòu)語(yǔ)言,構(gòu)成PL/SQL的基本單位是邏輯塊,塊中可以嵌套子塊,以塊為單位向OracleServer傳遞數(shù)據(jù)執(zhí)行,其塊結(jié)構(gòu)如下:DECLAREBEGINEXCEPTIONEND;,說(shuō)明部分:說(shuō)明變量及常量,,執(zhí)行部分:使用SQL的DML語(yǔ)言事務(wù)處理,,例外處理:處理錯(cuò)誤及警告信息,,邏輯塊結(jié)束,,《PL/SQL程序設(shè)計(jì)》,3,PL/SQL語(yǔ)言的特點(diǎn),PL/SQL中可以定義變量,變量有其作用范圍PL/SQL是以塊的方式設(shè)計(jì),塊中可以嵌套子塊,子塊可以位于塊中任何部分子塊可以是PL/SQL中的一條命令PL/SQL中可以使用條件判斷,循環(huán),游標(biāo)等高級(jí)語(yǔ)言程序設(shè)計(jì)方法模塊式的過(guò)程化語(yǔ)言,以塊為單位執(zhí)行使用PL/SQL可以優(yōu)化程序設(shè)計(jì),得到更好的性能(例如,執(zhí)行10個(gè)SQL語(yǔ)句,需要訪問(wèn)10次Oracle核心,如果10個(gè)SQL組成一個(gè)PL/SQL程序,則只需訪問(wèn)一次Oracle核心,將結(jié)果一次返回給用戶,則程序執(zhí)行效率高,節(jié)省時(shí)間,降低通信量),《PL/SQL程序設(shè)計(jì)》,4,減少對(duì)于Oracle核心的訪問(wèn),降低網(wǎng)絡(luò)負(fù)責(zé)數(shù)據(jù)庫(kù)數(shù)據(jù)類型集成PL/SQL支持全部的SQL數(shù)據(jù)類型,這些共享的數(shù)據(jù)類型與SQL所提供的直接存取相結(jié)合,使PL/SQL與Oracle數(shù)據(jù)字典結(jié)合成一體.PL/SQL與OracleRDBMS集成在一起,可以使用PL/SQL的集成數(shù)據(jù)類型,使變量的數(shù)據(jù)類型在數(shù)據(jù)庫(kù)的操作中實(shí)時(shí)確定.,PL/SQL語(yǔ)言的特點(diǎn),《PL/SQL程序設(shè)計(jì)》,5,PL/SQL與SQL語(yǔ)言結(jié)合,PL/SQL語(yǔ)句含有SQL的DML語(yǔ)句,檢索及事務(wù)處理PL/SQL中可以使用的SQL語(yǔ)句如下:INSERTUPDATEDELETESELECTINTOCOMMITROLLBACKSAVEPOINT支持RDBMS的所有數(shù)據(jù)類型對(duì)于SQL的數(shù)據(jù)類型進(jìn)行了擴(kuò)充,增加了新的數(shù)據(jù)類型,使PL/SQL所支持的數(shù)據(jù)類型更靈活.OracleRDBMS對(duì)于PL/SQL中引用的表名,列名進(jìn)行語(yǔ)句檢查對(duì)于SQL語(yǔ)句的執(zhí)行結(jié)果,PL/SQL提供返回信息檢查,通過(guò)PL/SQL的例外處理,記錄SQL的執(zhí)行結(jié)果.,《PL/SQL程序設(shè)計(jì)》,6,PL/SQL基礎(chǔ),變量的使用和其他高級(jí)語(yǔ)言一樣,在PL/SQL中可以使用變量注釋單行注釋:--多行注釋:/**/數(shù)據(jù)類型日期型Date字符型CHAR,VARCHAR2數(shù)字型NUMBER布爾型BOOLEAN(TRUE,FALSE,NULL),,數(shù)據(jù)類型,PL/SQL數(shù)據(jù)類型擴(kuò)展,數(shù)字型NUMBER存儲(chǔ)整型及實(shí)型數(shù)據(jù),可以定義精度和取值范圍BINARY_INTEGER可存儲(chǔ)帶符號(hào)整數(shù),為整數(shù)計(jì)算優(yōu)化性能DECNUMBER的子類型,存儲(chǔ)實(shí)型數(shù)據(jù)DOUBLEPRECISIONNUMBER的子類型,高精度實(shí)數(shù)INTEGERNUMBER的子類型,整數(shù)INTNUMBER的子類型,整數(shù),PL/SQL數(shù)據(jù)類型擴(kuò)展,數(shù)字型SMALLINTNUMBER的子類型,取值范圍比INTEGER小NUMERICNUMBER的子類型,與NUMBER等價(jià)REALNUMBER的子類型,存儲(chǔ)實(shí)型數(shù)據(jù),PL/SQL數(shù)據(jù)類型擴(kuò)展,字符型VARCHAR2存放可變長(zhǎng)字符串,有最大長(zhǎng)度限制CHAR字符型,固定長(zhǎng)度LONG長(zhǎng)字符型CLOB大對(duì)象字符(Oracle8、Oracle8i)日期型Date存儲(chǔ)日期數(shù)據(jù),PL/SQL數(shù)據(jù)類型擴(kuò)展,布爾型BOOLEAN結(jié)果是TRUE或FALSE二進(jìn)制數(shù)據(jù)RAW存儲(chǔ)多媒體數(shù)據(jù),如圖象、聲音、視頻等BLOB大對(duì)象如圖象、聲音、視頻等(Oracle8、Oracle8i),《PL/SQL程序設(shè)計(jì)》,11,PL/SQL基礎(chǔ),數(shù)據(jù)定義標(biāo)示符數(shù)據(jù)類型;標(biāo)示符數(shù)據(jù)類型:=PL/SQL表達(dá)式;例如,v_salarynumber(7,2);v_enamevarchar2(20):=‘SMITH’;,《PL/SQL程序設(shè)計(jì)》,12,PL/SQL基礎(chǔ),變量賦值變量名:=值;v_salary:=890.76;v_date:=‘25-MAR-99’;Available_now:=FALSE;%TYPE類型CreditReal(7,2);DebitCredit%TYPE;My_nameEmployee.ename%TYPE;%TYPE屬性+不必知道My_name的真正數(shù)據(jù)類型+當(dāng)數(shù)據(jù)庫(kù)中列ename列定義改變時(shí),數(shù)據(jù)庫(kù)運(yùn)行時(shí)自動(dòng)修改.%ROWTYPE:行類型,《PL/SQL程序設(shè)計(jì)》,13,PL/SQL基礎(chǔ),PL/SQL的記錄類型把邏輯相關(guān)的數(shù)據(jù)作為一個(gè)單元存儲(chǔ)起來(lái),在Declare段中定義record類型數(shù)據(jù),使某一變量使用該record型數(shù)據(jù).定義方法:TYPEr_recordisRECORD(v_nameemp.ename%TYPE,v_jobemp.job%TYPE,v_salemp.sal%TYPE);變量定義r_empr_record;變量使用SELECTename,job,salINTOr_empFROMempWHEREempno=7934;則,r_emp.v_ename,r_emp.v_job,r_emp.v_sal已有值;給變量賦值:r_employeer_record;r_employee.v_ename:=‘JACK’;r_employee.v_job:=‘CLERK’;r_employee.v_sal:=890.98;,PL/SQL程序設(shè)計(jì),《PL/SQL程序設(shè)計(jì)》,14,PL/SQL基礎(chǔ),TABLE類型數(shù)據(jù)PL/SQL中的表(table)類型類似于C語(yǔ)言中的結(jié)構(gòu)類型數(shù)組.定義方法:TYPEtable_empISTABLEOFemp.ename%TYPEINDEXBYBINARY_INTEGER;一個(gè)PL/SQL表有兩個(gè)列,(key,value),key列類型即是BINARY_INTEGER,而value類型則是所定義的數(shù)據(jù)類型.Table類型使用:定義變量my_name為table_emp類型,則可以使用變量my_name,也可以在SQL語(yǔ)句中使用table類型變量.my_nametable_emp;my_name(0):=‘SCOTT’;my_name(1):=‘SMITH’;my_name(2):=‘SUSAN’;SELECTenameINTOmy_name(10)FROMempWHEREempno=7934;,《PL/SQL程序設(shè)計(jì)》,15,在PL/SQL中使用SQL,INSERT語(yǔ)句的使用Declarev_empnoEMP.empno%TYPE:=1234;v_enameEMP.ename%TYPE:=‘SCOTT’;v_jobVARCHAR2(15):=‘MANAGER’;v_deptnoEMP.deptno%TYPE:=20;v_salNUMBER(7,2):=890.50;BeginINSERTINTOemp(empno,ename,job,hiredate,sal,deptno)VALUES(v_empno,v_ename,v_job,SYSDATE,v_sal,v_deptno);END;/,注意:非空(NOTNULL)必須有值,NOTNULL,,,《PL/SQL程序設(shè)計(jì)》,16,PL/SQL中使用SQL,DELETE語(yǔ)句的使用Declarev_empnoEMP.empno%TYPE:=1234;BeginDELETEFROMempWHEREempno=v_empno;End;事務(wù)處理語(yǔ)句的使用在PL/SQL中可以使用SQL的COMMIT,ROLLBACK及SAVEPOINT語(yǔ)句.Declarev_empnoEMP.empno%TYPE:=1234;BeginDELETEFROMempWHEREempno=v_empno;COMMIT;End;/,PL/SQL程序設(shè)計(jì),條件控制語(yǔ)句,IF-THEN語(yǔ)句IF條件成立THEN可執(zhí)行語(yǔ)句;ENDIF;,,條件控制語(yǔ)句,IF-THEN-ELSE語(yǔ)句IF條件成立THEN執(zhí)行語(yǔ)句1;ELSE執(zhí)行語(yǔ)句2;ENDIF;,,條件控制語(yǔ)句,IF-THEN-ELSIF語(yǔ)句IF條件1成立THEN執(zhí)行語(yǔ)句1;ELSIF條件2成立THEN執(zhí)行語(yǔ)句2;ELSIF條件3成立THEN執(zhí)行語(yǔ)句3;...ENDIF;,,循環(huán)語(yǔ)句,基本循環(huán)LOOP執(zhí)行語(yǔ)句;EXITWHEN條件成立;ENDLOOP;,,循環(huán)語(yǔ)句,WHILE循環(huán)WHILE條件成立LOOP執(zhí)行語(yǔ)句;ENDLOOP;,,循環(huán)語(yǔ)句,FOR循環(huán)FOR計(jì)數(shù)器IN低界..高界LOOP執(zhí)行語(yǔ)句;ENDLOOP;,,《PL/SQL程序設(shè)計(jì)》,23,光標(biāo)(CURSOR)設(shè)計(jì),什么是光標(biāo)光標(biāo)使用光標(biāo)說(shuō)明:在Declare段中命名光標(biāo),將光標(biāo)與一查詢語(yǔ)句聯(lián)系起來(lái).語(yǔ)法:CURSOR光標(biāo)名(參數(shù))ISSELECT字句;打開光標(biāo)獲取活動(dòng)集中的行FETCH語(yǔ)句檢索活動(dòng)集中的行,每次一行,每執(zhí)行一次FECTCH,光標(biāo)前進(jìn)到活動(dòng)集中的下一行。光標(biāo)下移關(guān)閉光標(biāo),《PL/SQL程序設(shè)計(jì)》,24,光標(biāo)屬性,光標(biāo)屬性每一個(gè)光標(biāo)有四種屬性%FOUND查詢語(yǔ)句(FETCH語(yǔ)句)返回記錄%NOTFOUND查詢語(yǔ)句(FETCH語(yǔ)句)無(wú)返回記錄,用于循環(huán)退出條件%ROWCOUNTFETCH已獲取的記錄數(shù)%ISOPEN光標(biāo)已打開標(biāo)記ifnotC%ISOPENthenopenC;endif;,LoopFETCHCINTOv_ename,v_sal;EXITWHENC%NOTFOUND;ENDLOOP;,,,屬性使用,《PL/SQL程序設(shè)計(jì)》,25,隱式光標(biāo)處理,隱式光標(biāo)處理隱式光標(biāo)是指在處理SQL時(shí),不需定義光標(biāo),所使用的SQL語(yǔ)句包括:INSERT,UPDATE,DELETE子句。隱式光標(biāo)屬性SQL%FOUNDSQL%NOTFOUND由執(zhí)行上述語(yǔ)句結(jié)果引起SQL%ROWCOUNT隱式光標(biāo)的使用Beginupdateempsetsal=1200whereempno=1234;ifSQL%NOTFOUNDtheninsertintoErrors(empno,sal)values(1234,1200);endif;End;,,數(shù)據(jù)庫(kù)中沒(méi)有編碼為1234的職工,,,,《PL/SQL程序設(shè)計(jì)》,26,例外處理(EXCEPTION),在PL/SQL中,警告信息、出錯(cuò)信息、或返回信息統(tǒng)稱為例外(Exception)。有兩中類型的例外。Oracle預(yù)定義的例外:是由PL/SQL運(yùn)行過(guò)程中,系統(tǒng)自動(dòng)產(chǎn)生的信息。用戶定義例外:是用戶根據(jù)需要,自己定義使用的例外,執(zhí)行時(shí)由用戶自己引起。預(yù)定義的例外CURSOR_ALREADY_OPENVALUE_ERRORNO_DATA_FOUNDINVALID_NUMBERTOO_MANY_ROWSZERO_DIVIDEINVALID_CURSOR用戶自定義例外用戶定義的例外必須在DECLARE段中說(shuō)明,在Begin段中用RAISE引起,在EXCEPTION段中使用。,,《PL/SQL程序設(shè)計(jì)》,27,例外處理(EXCEPTION),用戶定義例外的說(shuō)明:定義名為out_of_range的例外Declareout_of_rangeEXCEPTION;例外的使用DeclareBeginExceptionWhenNO_DATA_FOUNDTHEN…WhenCURSOR_ALREADY_OPENTHENWhenTOO_MANY_ROWSTHEN...…WhenOTHERSTHEN...END;,,,,例外段,在Exception段中對(duì)返回信息一一作出響應(yīng),,,《PL/SQL程序設(shè)計(jì)》,28,例外處理(EXCEPTION),用戶自定義例外的使用Declareout_of_rangeEXCEPTION;Begin…ifv_sal>MAX_SALthenRAISEout_of_range;endif;…ExceptionWhenNO_DATA_FOUNDTHEN…WhenCURSOR_ALREADY_OPENTHENWhenTOO_MANY_ROWSTHEN...Whenout_of_rangeTHEN...END;,,例外段,,在Declare段定義,在Begin段中引起,,,在Exception段中使用,,,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 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文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- LSQL 清華大學(xué) 計(jì)算中心 ORACLE 培訓(xùn)資料
鏈接地址:http://www.3dchina-expo.com/p-11497398.html