PL、SQL 功能和特點

上傳人:張姑****py 文檔編號:242919065 上傳時間:2024-09-11 格式:PPT 頁數(shù):28 大?。?97.50KB
收藏 版權(quán)申訴 舉報 下載
PL、SQL 功能和特點_第1頁
第1頁 / 共28頁
PL、SQL 功能和特點_第2頁
第2頁 / 共28頁
PL、SQL 功能和特點_第3頁
第3頁 / 共28頁

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《PL、SQL 功能和特點》由會員分享,可在線閱讀,更多相關(guān)《PL、SQL 功能和特點(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、ACCP V4.0,單擊此處編輯母版標(biāo)題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,*,第五章,使用 PL/SQL,回顧,,同義詞是現(xiàn)有數(shù)據(jù)庫對象的別名,,序列用于生成唯一、連續(xù)的序號,,視圖是基于一個或多個表的虛擬表,,索引是與表相關(guān)的一個可選結(jié)構(gòu),用于提高 SQL 語句執(zhí)行的性能,,索引類型有標(biāo)準(zhǔn)索引、唯一索引、反向鍵索引、位圖索引和基于函數(shù)的索引,,索引組織表基于主鍵訪問數(shù)據(jù),2,,目標(biāo),,理解 PL/SQL 功能和特點,,了解數(shù)據(jù)類型及其用法,,理解邏輯比較,,理解控制結(jié)構(gòu),,掌握錯誤處理,3,,PL/SQL 簡介,,PL/SQL 是過程語言(Procedural Lan

2、guage)與結(jié)構(gòu)化查詢語言(SQL)結(jié)合而成的編程語言,,PL/SQL 是對 SQL 的擴展,,支持多種數(shù)據(jù)類型,如大對象和集合類型,可使用條件和循環(huán)等控制結(jié)構(gòu),,可用于創(chuàng)建存儲過程、觸發(fā)器和程序包,給SQL語句的執(zhí)行添加程序邏輯,,與 Oracle 服務(wù)器和 Oracle 工具緊密集成,具備可移植性、靈活性和安全性,4,,PL/SQL 的優(yōu)點 2-1,,支持 SQL,在 PL/SQL 中可以使用:,,數(shù)據(jù)操縱命令,,事務(wù)控制命令,,游標(biāo)控制,,SQL 函數(shù)和 SQL 運算符,,支持面向?qū)ο缶幊?(OOP),,可移植性,可運行在任何操作系統(tǒng)和平臺上的Oralce 數(shù)據(jù)庫,,更佳的性能,PL/

3、SQL 經(jīng)過編譯執(zhí)行,用戶將整個語句塊發(fā)送給 Oracle,Oracle,Procedure,,Begin,,,ProcedureCall,,SQL Command,,…,,End,5,,PL/SQL 的優(yōu)點 2-2,,,PL/SQL,SQL,與 SQL 緊密集成,簡化數(shù)據(jù)處理。,,支持所有 SQL 數(shù)據(jù)類型,,支持 NULL 值,,支持 %TYPE 和 %ROWTYPE 屬性類型,安全性,可以通過存儲過程限制用戶對數(shù)據(jù)的訪問,6,,PL/SQL 的體系結(jié)構(gòu),,PL/SQL 引擎駐留在 Oracle 服務(wù)器中,,該引擎接受 PL/SQL 塊并對其進行編譯執(zhí)行,,將,PL/SQL 塊發(fā)送給 Or

4、acle 服務(wù)器,用戶,,執(zhí)行過程語句,引擎將 SQL 語句發(fā)送給SQL 語句執(zhí)行器,Oracle,服務(wù)器,PL/SQL引擎,SQL,語句 執(zhí)行器,過程語句 執(zhí)行器,執(zhí)行 SQL 語句,將結(jié)果發(fā)送給用戶,7,,PL/SQL 塊簡介,,PL/SQL 塊是構(gòu)成 PL/SQL 程序的基本單元,,將邏輯上相關(guān)的聲明和語句組合在一起,,PL/SQL 分為三個部分,聲明部分、可執(zhí)行部分和異常處理部分,,,[,DECLARE,,declarations],,BEGIN,,executable statements,,[EXCEPTION,,handlers],,END;,DECLARE,,qty_on_ha

5、nd NUMBER(5);,,BEGIN,,SELECT quantity INTO qty_on_hand,,FROM Products,,WHERE product =,'芭比娃娃',,FOR UPDATE OF quantity;,,IF qty_on_hand > 0 THEN,,UPDATE Products SET quantity = quantity + 1,,WHERE product = '芭比娃娃,';,,INSERT INTO purchase_record,,VALUES ('已購買芭比娃娃', SYSDATE);,,END IF;,,COMMIT;,,EXCEPTI

6、ON /* 異常處理語句 */,,WHEN OTHERS THEN,,DBMS_OUTPUT.PUT_LINE('出錯:'|| SQLERRM);,,END;,聲明部分定義變量、游標(biāo)和自定義異常,包含,SQL 和 PL/SQL 語句的可執(zhí)行部分,指定出現(xiàn)錯誤時需要執(zhí)行的操作,8,,變量和常量 1-2,,PL/SQL 塊中可以使用變量和常量,,在聲明部分聲明,使用前必須先聲明,,聲明時必須指定數(shù)據(jù)類型,每行聲明一個標(biāo)識符,,在可執(zhí)行部分的 SQL 語句和過程語句中使用,,聲明變量和常量的語法:,identifier,[CONSTANT],datatype,[NOT NULL],,[:= | D

7、EFAULT,expr,];,給變量賦值有兩種方法:,,使用賦值語句 :=,,使用 SELECT INTO 語句,9,,變量和常量 2-2,,DECLARE,,icode VARCHAR2(6);,,p_catg VARCHAR2(20);,,p_rate NUMBER;,,c_rate CONSTANT NUMBER := 0.10;,,BEGIN,,...,,icode := 'i205';,,SELECT p_category, itemrate * c_rate,,INTO p_catg, p_rate,,FROM itemfile WHERE itemcode = icode;,,

8、...,,END;,,10,,數(shù)據(jù)類型,,PL/SQL 支持的內(nèi)置數(shù)據(jù)類型,數(shù)據(jù)類型,LOB類型,標(biāo)量類型,屬性類型,%ROWTYPE,數(shù)字,字符,布爾型,日期時間,BFILE,BLOB,CLOB,NCLOB,%TYPE,提供某個變量或數(shù)據(jù)庫表列的數(shù)據(jù)類型,提供表示表中一行的記錄類型,存儲非結(jié)構(gòu)化數(shù)據(jù)塊,11,,數(shù)字?jǐn)?shù)據(jù)類型,,指定數(shù)值的存儲格式,數(shù)字?jǐn)?shù)據(jù)類型,NUMBER,BINARY_INTEGER,PLS_INTEGER,NATURAL,NATURALLN,POSITIVE,POSITIVEN,DECIMAL,FLOAT,INTEGER,REAL,SIGNTYPE,存儲有符號整數(shù),所需存

9、儲空間少于NUMBER類型值,存儲整數(shù)、實數(shù)和浮點數(shù),存儲有符號整數(shù),可使算術(shù)計算快速而有效,12,,字符數(shù)據(jù)類型,,字符數(shù)據(jù)類型包括:,,CHAR,,VARCHAR2,,LONG,,RAW,,LONG RAW,,PL/SQL 的數(shù)據(jù)類型與 SQL數(shù)據(jù)類型的比較,數(shù)據(jù)類型,SQL類型,PL/SQL類型,CHAR,1..2000,1..32767,LONG,1..2GB,1..32760,LONG RAW,1..2GB,1..32760,RAW,1..2000,1..32767,VARCHAR2,1..4000,1..32767,13,,日期時間和布爾數(shù)據(jù)類型,,日期時間類型,,存儲日期和時間數(shù)

10、據(jù),,常用的兩種日期時間類型,,DATE,,TIMESTAMP,,布爾數(shù)據(jù)類型,,此類別只有一種類型,即BOOLEAN類型,,用于存儲邏輯值(TRUE、FALSE和NULL),,不能向數(shù)據(jù)庫中插入BOOLEAN數(shù)據(jù),,不能將列值保存到BOOLEAN變量中,,只能對BOOLEAN變量執(zhí)行邏輯操作,14,,LOB 數(shù)據(jù)類型 2-1,,用于存儲大文本、圖像、視頻剪輯和聲音剪輯等非結(jié)構(gòu)化數(shù)據(jù)。,,LOB 數(shù)據(jù)類型可存儲最大 4GB的數(shù)據(jù)。,,LOB 類型包括:,,BLOB 將大型二進制對象存儲在數(shù)據(jù)庫中,,CLOB 將大型字符數(shù)據(jù)存儲在數(shù)據(jù)庫中,,NCLOB 存儲大型UNICODE字符數(shù)

11、據(jù),,BFILE 將大型二進制對象存儲在操作系統(tǒng)文件中,15,,LOB 數(shù)據(jù)類型 2-2,,LOB 類型的數(shù)據(jù)庫列僅存儲定位符,該定位符指向大型對象的存儲位置,,DBMS_LOB程序包用于操縱 LOB 數(shù)據(jù),SET SERVEROUTPUT ON,,DECLARE,,clob_var CLOB;,,amount INTEGER;,,offset INTEGER;,,output_var VARCHAR2(100);,,BEGIN,,SELECT chapter_text INTO clob_var,,FROM my_book_text,,WHERE chapter_

12、id=5;,,amount := 24; -- 要讀取的字符數(shù),,offset := 1; -- 起始位置,,DBMS_LOB.READ(clob_var,amount,offset,output_var);,,DBMS_OUTPUT.PUT_LINE(output_var);,,END;,,/,從表中選擇 CLOB 定位符,,到 clob_var變量中,從CLOB數(shù)據(jù)中讀取24個字符存儲到 output_var 變量中,顯示讀到的信息,16,,屬性類型,,用于引用數(shù)據(jù)庫列的數(shù)據(jù)類型,以及表示表中一行的記錄類型,,屬性類型有兩種:,,%TYPE - 引用變量和數(shù)據(jù)庫列的數(shù)據(jù)類型,,%

13、ROWTYPE - 提供表示表中一行的記錄類型,,使用屬性類型的優(yōu)點:,,不需要知道被引用的表列的具體類型,,如果被引用對象的數(shù)據(jù)類型發(fā)生改變,PL/SQL 變量的數(shù)據(jù)類型也隨之改變,icode itemfile.itemcode%TYPE;,,emp_rec scott.emp%ROWTYPE;,17,,布爾表達式的結(jié)果為TRUE、FALSE或NULL,通常由邏輯運算符AND、OR和NOT連接,,布爾表達式有三種類型:,,數(shù)字布爾型,,字符布爾型,,日期布爾型,邏輯比較,,邏輯比較用于比較變量和常量的值,這些表達式稱為布爾表達式,,布爾表達式由關(guān)系運算符與變量或常量組成,關(guān)系運算符,說明

14、,=,比較兩個變量是否相等,如果值相當(dāng),則返回 True,, !=,比較兩個變量,如果不相等,則返回 True,<,比較兩個變量,檢查值 1 是否小于值 2,>,比較兩個變量,檢查值 1 是否大于 值 2,<=,比較兩個變量,檢查變量 1 是否小于等于變量 2,>=,比較兩個變量,檢查變量 1 是否大于等于變量 2,18,,控制結(jié)構(gòu),,PL/SQL 支持的流程控制結(jié)構(gòu):,,條件控制,,IF 語句,,CASE 語句,,循環(huán)控制,,LOOP 循環(huán),,WHILE 循環(huán),,FOR 循環(huán),,順序控制,,GOTO 語句,,NULL 語句,19,,條件控制 2-1,,IF 語句根據(jù)條件執(zhí)行一系列語句,有三種

15、形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF,DECLARE,,icode VARCHAR2(4);,,irate NUMBER;,,BEGIN,,icode := 'i203';,,SELECT itemrate INTO irate FROM itemfile,,WHERE itemcode = icode;,,IF irate > 200 THEN,,UPDATE itemfile SET itemrate = itemrate - 200,,WHERE itemcode = icode;,,ELSE,,UPDATE itemfile SET item

16、rate = itemrate - 50,,WHERE itemcode = icode;,,END IF;,,DBMS_OUTPUT.PUT_LINE('itemrate='|| irate);,,END;,20,,條件控制 2-2,,BEGIN,,CASE ‘&grade’,,WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE(’優(yōu)異’);,,WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (優(yōu)秀’);,,WHEN ’C’ THEN DBMS_OUTPUT.PUT_LINE (’良好’);,,WHEN ’D’ THEN DBMS_OUTPUT.PUT

17、_LINE (’一般’);,,WHEN ’F’ THEN DBMS_OUTPUT.PUT_LINE (’較差’);,,ELSE DBMS_OUTPUT.PUT_LINE (’沒有此成績’);,,END CASE;,,END;,CASE 語句用于根據(jù)單個變量或表達式與多個值進行比較,,執(zhí)行 CASE 語句前,先計算選擇器的值,21,,循環(huán)控制,,循環(huán)控制用于重復(fù)執(zhí)行一系列語句,,循環(huán)控制語句包括:,,LOOP、EXIT 和 EXIT WHEN,,循環(huán)控制的三種類型:,,LOOP - 無條件循環(huán),,WHILE - 根據(jù)條件循環(huán),,FOR - 循環(huán)固定的次數(shù),LOOP,,sequen

18、ce_of_statements,,END LOOP;,,WHILE condition LOOP,,sequence_of_statements,,END LOOP;,,FOR counter IN [REVERSE] value1..value2,,LOOP,,sequence_of_statements,,END LOOP;,,22,,順序控制,,,順序控制用于按順序執(zhí)行語句,,順序控制語句包括:,,GOTO 語句 - 無條件地轉(zhuǎn)到標(biāo)簽指定的語句,,NULL 語句 - 什么也不做的空語句,DECLARE,,qtyhand itemfile.qty_hand%type;,,releve

19、l itemfile.re_level%type;,,BEGIN,,SELECT qty_hand,re_level INTO qtyhand,relevel,,FROM itemfile WHERE itemcode = 'i201';,,IF qtyhand < relevel THEN,,GOTO updation;,,ELSE,,GOTO quit;,,END IF;,,>,,UPDATE itemfile SET qty_hand = qty_hand + re_level,,WHERE itemcode = 'i201';,,>,,NULL;,,END;,23,,動態(tài) SQL,,動

20、態(tài) SQL 是指在PL/SQL程序執(zhí)行時生成的 SQL 語句,,編譯程序?qū)討B(tài) SQL 不做處理,而是在程序運行時動態(tài)構(gòu)造語句、對語句進行語法分析并執(zhí)行,,DDL 語句命令和會話控制語句不能在 PL/SQL 中直接使用,但是可以通過動態(tài) SQL 來執(zhí)行,,執(zhí)行動態(tài) SQL 的語法:,,,,EXECUTE IMMEDIATE dynamic_sql_string,,[INTO define_variable_list],,[USING bind_argument_list];,DECLARE,,sql_stmt VARCHAR2(200);,,emp_id NUMBER(4) := 7566;

21、,,emp_rec emp%ROWTYPE;,,BEGIN,,EXECUTE IMMEDIATE,,'CREATE TABLE bonus1 (id NUMBER, amt NUMBER)';,,,sql_stmt := 'SELECT * FROM emp WHERE empno = :id';,,EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;,,END;,24,,錯誤處理 2-1,,在運行程序時出現(xiàn)的錯誤叫做異常,,發(fā)生異常后,語句將停止執(zhí)行,控制權(quán)轉(zhuǎn)移到 PL/SQL 塊的異常處理部分,,異常有兩種類型:,,預(yù)定義異常 - 當(dāng)

22、 PL/SQL 程序違反 Oracle 規(guī)則或超越系統(tǒng)限制時隱式引發(fā),,用戶定義異常 - 用戶可以在 PL/SQL 塊的聲明部分定義異常,自定義的異常通過 RAISE 語句顯式引發(fā),25,,錯誤處理 2-2,,處理預(yù)定義異常,,處理用戶定義異常,DECLARE,,ordernum VARCHAR2(5);,,BEGIN,,SELECT orderno INTO ordernum FROM order_master;,,EXCEPTION,,WHEN TOO_MANY_ROWS THEN,,DBMS_OUTPUT.PUT_LINE ('返回多行');,,END;,DECLARE,,inval

23、idCATEGORY EXCEPTION;,,category VARCHAR2(10);,,BEGIN,,category := ',,IF category NOT IN ('附件','頂蓋','備件') THEN,,RAISE invalidCATEGORY;,,ELSE,,DBMS_OUTPUT.PUT_LINE('您輸入的類別是'|| category);,,END IF;,,EXCEPTION,,WHEN invalidCATEGORY THEN,,DBMS_OUTPUT.PUT_LINE('無法識別該類別');,,END;,26,,RAISE_APPLICATION_ERROR

24、過程,,用于創(chuàng)建用戶定義的錯誤信息,,可以在可執(zhí)行部分和異常處理部分使用,,錯誤編號必須介于 –20000 和 –20999 之間,,錯誤消息的長度可長達 2048 個字節(jié),,引發(fā)應(yīng)用程序錯誤的語法:,,,,RAISE_APPLICATION_ERROR(error_number, error_message);,引發(fā)應(yīng)用程序錯誤,,DECLARE,,rate itemfile.itemrate%TYPE;,,rate_exception EXCEPTION;,,BEGIN,,SELECT NVL(itemrate,0) INTO rate FROM itemfile,,WHERE item

25、code = 'i207';,,IF rate = 0 THEN,,RAISE rate_exception;,,ELSE,,DBMS_OUTPUT.PUT_LINE('項費率為:' || rate);,,END IF;,,EXCEPTION,,WHEN rate_exception THEN,,RAISE_APPLICATION_ERROR(-20001, '未指定項費率');,,END;,,27,,總結(jié),,PL/SQL 是一種可移植的高性能事務(wù)處理語言,,,PL/SQL 引擎駐留在 Oracle 服務(wù)器中,,PL/SQL 塊由聲明部分、可執(zhí)行部分和異常處理部分組成,,PL/SQL 數(shù)據(jù)類型包括標(biāo)量數(shù)據(jù)類型、LOB 數(shù)據(jù)類型和屬性類型,,控制結(jié)構(gòu)包括條件控制、循環(huán)控制和順序控制,,PL/SQL 支持動態(tài) SQL,,運行時出現(xiàn)的錯誤叫做異常,,異??梢苑譃轭A(yù)定義異常和用戶定義的異常,28,,

展開閱讀全文
溫馨提示:
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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!