版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十四章 存儲(chǔ)過(guò)程與函數(shù)第十三章 存儲(chǔ)過(guò)程與函數(shù)定義 :過(guò)程(函數(shù))是在服務(wù)器端運(yùn)行的完成一定功能的一段pl/sql程序。優(yōu)點(diǎn):存儲(chǔ)過(guò)程因?yàn)镾QL語(yǔ)句已經(jīng)預(yù)編繹過(guò)了,因此運(yùn)行的速度比較快。存儲(chǔ)過(guò)程可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值??梢韵虺绦蚍祷劐e(cuò)誤原因。存儲(chǔ)過(guò)程運(yùn)行比較穩(wěn)定,不會(huì)有太多的錯(cuò)誤。只要一次成功,以后都會(huì)按這個(gè)程序運(yùn)行。第十三章 存儲(chǔ)過(guò)程與函數(shù)存儲(chǔ)過(guò)程主要是在服務(wù)器上運(yùn)行,減少對(duì)客戶機(jī)的壓力。存儲(chǔ)過(guò)程可以包含程序流、邏輯以及對(duì)數(shù)據(jù)庫(kù)的查詢。同時(shí)可以實(shí)體封裝和隱藏了數(shù)據(jù)邏輯。存儲(chǔ)過(guò)程可以在單個(gè)存儲(chǔ)過(guò)程中執(zhí)行一系列SQL語(yǔ)句。存儲(chǔ)過(guò)程可以從自己的存儲(chǔ)過(guò)程內(nèi)引用其它存
2、儲(chǔ)過(guò)程,這可以簡(jiǎn)化一系列復(fù)雜語(yǔ)句。 14.1 存儲(chǔ)過(guò)程 創(chuàng)建過(guò)程語(yǔ)法:create or replace procedure procedure_name (argment in| in out type, argment in | out | in out type is | as ( 注: 不用 declare 語(yǔ)句 ) Begin exception end;14.1 存儲(chǔ)過(guò)程這里的IN表示向存儲(chǔ)過(guò)程傳遞參數(shù),OUT表示從存儲(chǔ)過(guò)程返回參數(shù)。而IN OUT 表示傳遞參數(shù)和返回參數(shù);在存儲(chǔ)過(guò)程內(nèi)的變量類型只能指定變量類型;不能指定長(zhǎng)度;在AS或IS 后聲明要用到的變量名稱和變量類型及長(zhǎng)度;在
3、AS或IS 后聲明變量不要加declare 語(yǔ)句。 14.1 存儲(chǔ)過(guò)程CREATE OR REPLACE PROCEDURE ModeTest ( p_InParameter IN NUMBER, p_OutParameter OUT NUMBER, p_InOutParameter IN OUT NUMBER) IS v_LocalVariable NUMBER;14.1 存儲(chǔ)過(guò)程BEGIN v_LocalVariable := p_InParameter; - Legal p_InParameter := 7; - Illegal p_OutParameter := 7; - Legal
4、v_LocalVariable := p_outParameter; - Illegal v_LocalVariable := p_InOutParameter; - Legal p_InOutParameter := 7; - LegalEND ModeTest;/14.1 存儲(chǔ)過(guò)程使用過(guò)程 存儲(chǔ)過(guò)程建立完成后,只要通過(guò)授權(quán),用戶就可以在SQLPLUS 、Oracle開發(fā)工具或第三方開發(fā)工具來(lái)調(diào)用運(yùn)行。Oracle 使用EXECUTE 語(yǔ)句來(lái)實(shí)現(xiàn)對(duì)存儲(chǔ)過(guò)程的調(diào)用。14.1 存儲(chǔ)過(guò)程開發(fā)存儲(chǔ)過(guò)程步驟1、 編輯存儲(chǔ)過(guò)程源碼使用文字編輯處理軟件編輯存儲(chǔ)過(guò)程源碼,要用類似WORD 文字處理軟件進(jìn)行編
5、輯時(shí),要將源碼存為文本格式。2、 對(duì)存儲(chǔ)過(guò)程程序進(jìn)行解釋在SQLPLUS或用調(diào)試工具將 存儲(chǔ)過(guò)程程序進(jìn)行解釋;如:SQLstart c:stat1.sql3、 調(diào)試源碼直到正確。 在SQLPLUS下來(lái)調(diào)試主要用的方法是:使用 SHOW ERROR命令來(lái)提示源碼的錯(cuò)誤位置;使用 user_errors 數(shù)據(jù)字典來(lái)查看各存儲(chǔ)過(guò)程的錯(cuò)誤位置。 14.1 存儲(chǔ)過(guò)程例1創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,完成給定的員工號(hào)以后,刪除該員工。CREATE OR REPLACE PROCEDURE DelEmp(p_empno IN emp.empno%TYPE) ASNo_result EXCEPTION;BEGIN DEL
6、ETE FROM emp WHERE empno=p_empno; IF SQL%NOTFOUND THEN RAISE no_result; END IF; DBMS_OUTPUT.PUT_LINE(編碼為|p_empno|的員工已被除名!);14.1 存儲(chǔ)過(guò)程EXCEPTION WHEN no_result THEN DBMS_OUTPUT.PUT_LINE(你需要的數(shù)據(jù)不存在!); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(發(fā)生其它錯(cuò)誤!);END;14.1 存儲(chǔ)過(guò)程例2 給指定的員工加薪。CREATE OR REPLACE PROCEDURE mon_
7、addsal(p_empno in emp.empno%TYPE,p_addsal in m%TYPE) ASno_result EXCEPTION;BEGINUPDATE empSET comm=p_addsalWHERE empno=p_empno;IF SQL%NOTFOUND THEN RAISE no_result;END IF; 14.1 存儲(chǔ)過(guò)程DBMS_OUTPUT.PUT_LINE(p_empno|的本月加薪額度為|p_addsal);EXCEPTIONWHEN no_result THENDBMS_OUTPUT.PUT_LINE(該員工不存在!);WHEN OTHERS T
8、HENDBMS_OUTPUT.PUT_LINE(未知錯(cuò)誤!) ;END;14.2 創(chuàng)建函數(shù) Oracle的函數(shù)是一個(gè)獨(dú)有的對(duì)象,它也是由PL/SQL語(yǔ)句編寫而成,但的不同的地方是:函數(shù)必須返回某些值,而存儲(chǔ)過(guò)程可以不返回任何值。 14.2 創(chuàng)建函數(shù)CREATE FUNCTION語(yǔ)法如下:create or replace function function_name (argment in| in out TYPE, argment in | out | in out type return return_type is | as begin function_body exception .
9、 . . . . . end;14.2 創(chuàng)建函數(shù)例1:創(chuàng)建一個(gè)函數(shù),完成給定的部門號(hào)以后,求出該部門的所有員工的工資和 。CREATE OR REPLACE FUNCTION f_sum_sal(deptid IN emp.deptno%TYPE) RETURN NUMBER ASv_sumsal number;BEGINSELECT SUM(sal)+SUM(nvl(comm,0) INTO v_sumsal FROM emp WHERE deptno=deptid;-DBMS_OUTPUT.PUT_LINE(deptid|的工資和為|v_sumsal);RETURN V_sumsal;14
10、.2 創(chuàng)建函數(shù)EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE(你需要的數(shù)據(jù)不存在!);WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(發(fā)生其它錯(cuò)誤!);END;14.2 創(chuàng)建函數(shù)調(diào)用過(guò)程:DECLARE v_sum_sal number;BEGINV_sum_sal:=f_sum_sal(20);DBMS_OUTPUT.PUT_LINE(總工資是|v_sum_sal);END;14.3 過(guò)程和函數(shù)中的例外處理 使用例外處理的必要性一旦出現(xiàn)例外的情況,Oracle就自動(dòng)終止程序的運(yùn)行。當(dāng)程序出錯(cuò)時(shí)用戶無(wú)法得到提示
11、,調(diào)試者也無(wú)法進(jìn)行修改程序。一般無(wú)論多簡(jiǎn)單的程序最好也要給出例外處理的要求。 14.3 過(guò)程和函數(shù)中的例外處理1、用戶定義的例外必須聲明且必須用RAISE語(yǔ)句來(lái)激活no_result EXCEPTION;BEGINIF SQL%NOTFOUND THEN RAISE no_result;END IF;EXCEPTIONWHEN no_result THENDBMS_OUTPUT.PUT_LINE(該員工不存在!);WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(未知錯(cuò)誤!) ;END;14.3 過(guò)程和函數(shù)中的例外處理使用戶EXCEPTION_INIT處理 . Prag
12、ma(也叫偽指令)是在編譯時(shí)內(nèi)處理,不是在運(yùn)行時(shí)被處理。DECLAREdeadlock_detected EXCEPTION;PRAGMA EXCEPTION_INIT(deadlock_detected, -60);BEGIN.EXCEPTIONWHEN deadlock_detected THEN- handle the errorEND;14.3 過(guò)程和函數(shù)中的例外處理使用戶raise_application_error處理 BEGINSELECT sal INTO curr_sal FROM emp WHERE empno = emp_id;IF curr_sal IS NULL TH
13、EN/* 發(fā)布用戶定義的錯(cuò)誤信息 */raise_application_error(-20101, Salary is missing);ELSEUPDATE emp SET sal = curr_sal + amount WHERE empno = emp_id;END IF;END raise_salary;與存儲(chǔ)過(guò)程、函數(shù)相關(guān)數(shù)據(jù)字典user_source 用戶的存儲(chǔ)過(guò)程、函數(shù)的源代碼字典all_source 所有用戶的存儲(chǔ)過(guò)程、函數(shù)的源代碼字典user_errors 用戶的存儲(chǔ)過(guò)程、函數(shù)的源代碼存在錯(cuò)誤的信息字典相關(guān)的權(quán)限:create any proceduredrop any procedure如果某個(gè)用戶沒有權(quán)限來(lái)創(chuàng)建存儲(chǔ)過(guò)程,則需要DBA將創(chuàng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 體驗(yàn)店行業(yè)市場(chǎng)營(yíng)銷總結(jié)
- 2025-2030全球無(wú)DEHP分隔膜無(wú)針輸液接頭行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球基因組注釋服務(wù)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球酚醛彩鋼板行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)隧道安全監(jiān)測(cè)系統(tǒng)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球燃?xì)廨啓C(jī)仿真軟件行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)自動(dòng)水力平衡閥行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球辦公室文件柜行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)4-苯氧基苯酚行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球太空級(jí)電機(jī)控制器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 護(hù)理人文知識(shí)培訓(xùn)課件
- 建筑工程施工安全管理課件
- 2025年春新人教版數(shù)學(xué)七年級(jí)下冊(cè)教學(xué)課件 7.2.3 平行線的性質(zhì)(第1課時(shí))
- 安徽省合肥市2025年高三第一次教學(xué)質(zhì)量檢測(cè)地理試題(含答案)
- 2025年新合同管理工作計(jì)劃
- 統(tǒng)編版八年級(jí)下冊(cè)語(yǔ)文第三單元名著導(dǎo)讀《經(jīng)典常談》閱讀指導(dǎo) 學(xué)案(含練習(xí)題及答案)
- 風(fēng)光儲(chǔ)儲(chǔ)能項(xiàng)目PCS艙、電池艙吊裝方案
- 產(chǎn)業(yè)鏈競(jìng)爭(zhēng)關(guān)聯(lián)度
- TTJSFB 002-2024 綠色融資租賃項(xiàng)目評(píng)價(jià)指南
- 高考地理一輪復(fù)習(xí)學(xué)案+區(qū)域地理填圖+亞洲
- 全新車位轉(zhuǎn)讓協(xié)議模板下載(2024版)
評(píng)論
0/150
提交評(píng)論