版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、《Oracle9i PL/SQL程序設計》,Procedural Language,,《PL/SQL程序設計》,2,PL/SQL 概述,PL/SQL是Oracle對關系數(shù)據(jù)庫語言SQL的過程化擴充,它將數(shù)據(jù)庫技術和過程化程序設計語言聯(lián)系起來,是一種應用開發(fā)語言,可使用循環(huán),分支處理數(shù)據(jù),將SQL的數(shù)據(jù)操縱功能與過程化語言數(shù)據(jù)處理功能結合起來. PL/SQL的使用,使SQL成為一種高級程序設計語言,支持高級語言的塊操作,條件判斷,循
2、環(huán)語句,嵌套等,與數(shù)據(jù)庫核心的數(shù)據(jù)類型集成,使SQL 的程序設計效率更高. PL/SQL是一種塊結構語言,構成PL/SQL的基本單位是邏輯塊,塊中可以嵌套子塊,以塊為單位向Oracle Server傳遞數(shù)據(jù)執(zhí)行,其塊結構如下: DECLARE BEGIN EXCEPTION END;,說明部分:說明變量及常量,,執(zhí)行部分:使用SQL的DML語言事務處理,,例外處理:處理錯誤及警告信息
3、,,邏輯塊結束,,《PL/SQL程序設計》,3,PL/SQL語言的特點,PL/SQL中可以定義變量,變量有其作用范圍PL/SQL是以塊的方式設計,塊中可以嵌套子塊,子塊可以位于塊中任何部分子塊可以是PL/SQL中的一條命令PL/SQL中可以使用條件判斷,循環(huán),游標等高級語言程序設計方法模塊式的過程化語言,以塊為單位執(zhí)行使用PL/SQL可以優(yōu)化程序設計,得到更好的性能(例如,執(zhí)行 10個SQL語句,需要訪問10次 Or
4、acle核心,如果10個SQL組成一個PL/SQL程序,則只需訪問一次Oracle 核心,將結果一次返回給用戶,則程序執(zhí)行效率高,節(jié)省時間,降低通信量),《PL/SQL程序設計》,4,減少對于Oracle核心的訪問,降低網(wǎng)絡負責數(shù)據(jù)庫數(shù)據(jù)類型集成PL/SQL支持全部的SQL數(shù)據(jù)類型,這些共享的數(shù)據(jù)類型與SQL所提供的直接存取相結合,使PL/SQL與Oracle數(shù)據(jù)字典結合成一體.PL/SQL與Oracle RDBMS集成在一起,
5、可以使用PL/SQL的集成數(shù)據(jù)類型,使變量的數(shù)據(jù)類型在數(shù)據(jù)庫的操作中實時確定.,PL/SQL語言的特點,《PL/SQL程序設計》,5,PL/SQL與SQL語言結合,PL/SQL語句含有SQL的DML語句,檢索及事務處理PL/SQL中可以使用的SQL語句如下: INSERT UPDATE DELETE SELECT INTO COMMIT ROLLBAC
6、K SAVEPOINT支持 RDBMS 的所有數(shù)據(jù)類型 對于SQL的數(shù)據(jù)類型進行了擴充,增加了新的數(shù)據(jù)類型,使PL/SQL所支持的數(shù)據(jù)類型更靈活.Oracle RDBMS 對于PL/SQL中引用的表名,列名進行語句檢查對于SQL語句的執(zhí)行結果,PL/SQL提供返回信息檢查,通過PL/SQL的例外處理,記錄SQL的執(zhí)行結果.,《PL/SQL程序設計》,6,PL/SQL基礎,變量的使用 和其他高級語言一樣
7、,在PL/SQL中可以使用變 量注釋 單行注釋: -- 多行注釋: /* */數(shù)據(jù)類型 日期型 Date 字符型 CHAR,VARCHAR2
8、 數(shù)字型 NUMBER 布爾型 BOOLEAN(TRUE,FALSE,NULL),,數(shù)據(jù)類型,PL/SQL數(shù)據(jù)類型擴展,數(shù)字型NUMBER 存儲整型及實型數(shù)據(jù),可以定義精度和取值范圍BINARY_INTEGER 可存儲帶符號整數(shù),為整數(shù)計算優(yōu)化性能 DEC NUMBER的子類型,存
9、儲實型數(shù)據(jù) DOUBLE PRECISION NUMBER的子類型,高精度實數(shù) INTEGER NUMBER的子類型,整數(shù) INT NUMBER的子類型,整數(shù),PL/SQL數(shù)據(jù)類型擴展,數(shù)字型SMALLINT NUMBER的子類型,取值范圍比INTEGER小NUMERIC NUMBER的子類型,與NUM
10、BER等價REAL NUMBER的子類型,存儲實型數(shù)據(jù),PL/SQL數(shù)據(jù)類型擴展,字符型VARCHAR2 存放可變長字符串,有最大長度限制 CHAR 字符型,固定長度 LONG 長字符型 CLOB 大對象字符(Oracle8、Oracle8i) 日期型 Date 存儲日期數(shù)據(jù),PL/SQL數(shù)據(jù)類型擴展,布爾型 BOOLEAN 結果是TRUE或FALSE 二進制數(shù)據(jù) RAW
11、 存儲多媒體數(shù)據(jù),如圖象、聲音、視頻等 BLOB 大對象如圖象、聲音、視頻等(Oracle8、Oracle8i),《PL/SQL程序設計》,11,PL/SQL基礎,數(shù)據(jù)定義 標示符 數(shù)據(jù)類型 ; 標示符 數(shù)據(jù)類型 := PL/SQL表達式;例如, v_salary number(7,2); v_ename varchar2(20) :=‘SM
12、ITH’;,《PL/SQL程序設計》,12,PL/SQL基礎,變量賦值 變量名 := 值; v_salary := 890.76; v_date :=‘25-MAR-99’; Available_now :=FALSE;%TYPE類型Credit Real(7,2);
13、Debit Credit%TYPE; My_name Employee.ename%TYPE; %TYPE 屬性 + 不必知道My_name的真正數(shù)據(jù)類型 + 當數(shù)據(jù)庫中列ename列定義改變時,數(shù) 據(jù)庫運行時自動修改.%ROWTYPE:行類型,《PL/SQL程序設計》,13,PL/SQL基礎,PL/SQL 的記錄類型 把邏輯相關的數(shù)據(jù)作為一個單元存儲起來,在
14、 Declare 段中定義record類型數(shù)據(jù),使某一 變量使用該record型數(shù)據(jù).定義方法:TYPE r_record is RECORD ( v_name emp.ename%TYPE,
15、 v_job emp.job%TYPE, v_sal emp.sal%TYPE); 變量定義 r_emp r_record; 變量使用 SELECT ename,job,sal INTO r_emp FROM emp
16、 WHERE empno=7934; 則,r_emp.v_ename,r_emp.v_job,r_emp.v_sal 已有 值; 給變量賦值: r_employee r_record; r_employee.v_ename :=‘JACK’; r_e
17、mployee.v_job :=‘CLERK’; r_employee.v_sal := 890.98;,PL/SQL程序設計,《PL/SQL程序設計》,14,PL/SQL基礎,TABLE類型數(shù)據(jù) PL/SQL中的表(table)類型類似于C語言中的 結構類型數(shù)組.定義方法:TYPE table_emp IS TABLE OF emp.ename %TYPE
18、 INDEX BY BINARY_INTEGER;一個PL/SQL表有兩個列,(key,value),key列類型即是 BINARY_INTEGER,而value類型則是所定義的數(shù)據(jù)類型.Table類型使用: 定義變量 my_name為 table_emp 類型,則可以使用變量 my_name ,也可以在SQL語句中使用 table類型變量. my_n
19、ame table_emp; my_name(0) :=‘SCOTT’; my_name(1) :=‘SMITH’; my_name(2) :=‘SUSAN’;SELECT ename INTO my_name(10) FROM emp WHERE empno = 79
20、34;,《PL/SQL程序設計》,15,在PL/SQL中使用SQL,INSERT語句的使用 Declare v_empno EMP.empno%TYPE :=1234; v_ename EMP.ename%TYPE :=‘SCOTT’; v_job VARCHAR2(15) :=
21、‘MANAGER’; v_deptno EMP.deptno%TYPE :=20; v_sal NUMBER(7,2) :=890.50; Begin INSERT INTO emp(empno,ename,job,hiredate,sal,deptno) VALU
22、ES(v_empno,v_ename,v_job,SYSDATE,v_sal,v_deptno); END; /,注意:非空(NOT NULL) 必須有值,NOT NULL,,,《PL/SQL程序設計》,16,PL/SQL中使用SQL,DELETE 語句的使用 Declare v_empno EMP.empno%TYPE :=1234; Begin DELETE F
23、ROM emp WHERE empno=v_empno; End;事務處理語句的使用在PL/SQL中可以使用SQL的 COMMIT,ROLLBACK及 SAVEPOINT語句.Declare v_empno EMP.empno%TYPE :=1234;Begin DELETE FROM emp WHERE empno=v_empno; COMMIT; End;
24、/,PL/SQL程序設計,條件控制語句,IF-THEN語句 IF 條件成立 THEN 可執(zhí)行語句; END IF;,,條件控制語句,IF-THEN-ELSE語句 IF 條件成立 THEN 執(zhí)行語句1; ELSE 執(zhí)行語句2; END IF;,,條件控制語句,IF-THEN-ELSIF語句 IF 條件1成立 THEN 執(zhí)行語
25、句1; ELSIF 條件2成立 THEN 執(zhí)行語句2; ELSIF 條件3成立 THEN 執(zhí)行語句3; ... END IF;,,循環(huán)語句,基本循環(huán) LOOP 執(zhí)行語句; EXIT WHEN 條件成立; END LOOP;,,循環(huán)語句,WHILE循環(huán) WHILE 條件成立 LOOP
26、 執(zhí)行語句; END LOOP;,,循環(huán)語句,FOR循環(huán) FOR 計數(shù)器 IN 低界..高界 LOOP 執(zhí)行語句; END LOOP;,,《PL/SQL程序設計》,23,光標(CURSOR)設計,什么是光標光標使用光標說明 :在Declare 段中命名光標,將光標與一查詢語句聯(lián)系起來. 語法:
27、CURSOR 光標名(參數(shù)) IS SELECT 字句; 打開光標 獲取活動集中的行 FETCH語句檢索活動集中的行,每次一行,每執(zhí)行一次FECTCH,光標前進到活動集中的下一行。光標下移關閉光標,《PL/SQL程序設計》,24,光標屬性,光標屬性 每一個光標有四種屬性%FOUND 查詢語句(FETCH語句)返回記錄%NOTFOUND 查詢語句(FETCH語句)無返回記錄
28、,用于循環(huán)退出條件%ROWCOUNT FETCH已獲取的記錄數(shù)%ISOPEN 光標已打開標記 if not C%ISOPEN then open C; end if;,Loop FETCH C INTO v_ename,v_sal;EXIT WHEN C%NOTFOUND;END LOOP;,,,屬性使用,《PL/SQL程序設計》,25,隱式光標處理,隱式光標處
29、理 隱式光標是指在處理SQL時,不需定義光標,所使用的SQL語句包括:INSERT ,UPDATE,DELETE子句。隱式光標屬性 SQL%FOUND SQL%NOTFOUND 由執(zhí)行上述語句結果引起 SQL%ROWCOUNT隱式光標的使用Begin update emp set sal=1200 wher
30、e empno=1234; if SQL%NOTFOUND then insert into Errors(empno,sal) values(1234,1200); end if;End;,,數(shù)據(jù)庫中沒有編碼為1234的職工,,,,《PL/SQL程序設計》,26,例外處理(EX
31、CEPTION),在PL/SQL中,警告信息、出錯信息、或返回信息統(tǒng)稱為例外(Exception)。有兩中類型的例外。Oracle預定義的例外: 是由PL/SQL運行過程中,系統(tǒng)自動產(chǎn)生的信息。 用戶定義例外: 是用戶根據(jù)需要,自己定義使用的例外,執(zhí)行時 由用戶自己引起。預定義的例外CURSOR_ALREADY_OPEN V
32、ALUE_ERRORNO_DATA_FOUND INVALID_NUMBERTOO_MANY_ROWS ZERO_DIVIDEINVALID_CURSOR用戶自定義例外 用戶定義的例外必須在DECLARE段中說明,在Begin段中用RAISE引起,在EXCEPTION段中使用。,,《PL/SQL程序設計》,27,例外處理(EXCEPTIO
33、N),用戶定義例外的說明:定義名為 out_of_range 的例外 Declare out_of_range EXCEPTION;例外的使用DeclareBeginException When NO_DATA_FOUND THEN … When CURSOR
34、_ALREADY_OPEN THEN When TOO_MANY_ROWS THEN ... … When OTHERS THEN ...END;,,,,例外段,在Excepti
35、on段中對返回信息一一作出響應,,,《PL/SQL程序設計》,28,例外處理(EXCEPTION),用戶自定義例外的使用Declare out_of_range EXCEPTION;Begin … if v_sal >MAX_SAL then RAISE out_of_range; end if; … Exception
36、 When NO_DATA_FOUND THEN … When CURSOR_ALREADY_OPEN THEN When TOO_MANY_ROWS THEN ... When out_of_range
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論