資源描述:
《ORACLE PL SQL編程詳解之六》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、ORACLEPL/SQL編程之六作者:來源:2011-05-3023:18:40我要評論(18)核心提示:本篇主要內(nèi)容如下:6.1引言6.2創(chuàng)建函數(shù)6.3存儲過程6.3.1創(chuàng)建過程6.3.2調(diào)用存儲過程6.3.3AUTHID6.3.4PRAGMAAUTONOMOUS_TRANSACTION6.3.5開發(fā)存儲過程步驟6.3.6刪除過程和函數(shù)6.3.7過程與函數(shù)的比較6.1?引言過程與函數(shù)(另外還有包與觸發(fā)器)是命名的PL/SQL塊(也是用戶的方案對象),被編譯后存儲在數(shù)據(jù)庫中,以備執(zhí)行。因此,其它P
2、L/SQL塊可以按名稱來使用他們。所以,可以將商業(yè)邏輯、企業(yè)規(guī)則寫成函數(shù)或過程保存到數(shù)據(jù)庫中,以便共享。過程和函數(shù)統(tǒng)稱為PL/SQL子程序,他們是被命名的PL/SQL塊,均存儲在數(shù)據(jù)庫中,并通過輸入、輸出參數(shù)或輸入/輸出參數(shù)與其調(diào)用者交換信息。過程和函數(shù)的唯一區(qū)別是函數(shù)總向調(diào)用者返回數(shù)據(jù),而過程則不返回數(shù)據(jù)。在本節(jié)中,主要介紹:1.??創(chuàng)建存儲過程和函數(shù)。2.??正確使用系統(tǒng)級的異常處理和用戶定義的異常處理。3.??建立和管理存儲過程和函數(shù)。-17-6.2?創(chuàng)建函數(shù)1.創(chuàng)建函數(shù)?語法如下:??CR
3、EATE?[OR?REPLACE]?FUNCTION?function_name?(arg1?[?{?IN?
4、?OUT?
5、?IN?OUT?}]?type1?[DEFAULT?value1],?[arg2?[?{?IN?
6、?OUT?
7、?IN?OUT?}]?type2?[DEFAULT?value1]],?......?[argn?[?{?IN?
8、?OUT?
9、?IN?OUT?}]?typen?[DEFAULT?valuen]])?[?AUTHID?DEFINER?
10、?CURRENT_USER?]RET
11、URN?return_type??IS?
12、?AS????<類型.變量的聲明部分>?BEGIN????執(zhí)行部分????RETURN?expressionEXCEPTION????異常處理部分END?function_name;??l????????IN,OUT,INOUT是形參的模式。若省略,則為IN模式。IN模式的形參只能將實參傳遞給形參,進入函數(shù)內(nèi)部,但只能讀不能寫,函數(shù)返回時實參的值不變。OUT模式的形參會忽略調(diào)用時的實參值(或說該形參的初始值總是NULL),但在函數(shù)內(nèi)部可以被讀或?qū)?,函?shù)返回
13、時形參的值會賦予給實參。INOUT具有前兩種模式的特性,即調(diào)用時,實參的值總是傳遞給形參,結(jié)束時,形參的值傳遞給實參。調(diào)用時,對于IN模式的實參可以是常量或變量,但對于OUT和INOUT模式的實參必須是變量。?l????????一般,只有在確認function_name函數(shù)是新函數(shù)或是要更新的函數(shù)時,才使用ORREPALCE關(guān)鍵字,否則容易刪除有用的函數(shù)。?例1.??????????獲取某部門的工資總和:?--獲取某部門的工資總和CREATE?OR?REPLACEFUNCTION?get_sala
14、ry(??Dept_no?NUMBER,??Emp_count?OUT?NUMBER)??RETURN?NUMBER?IS??V_sum?NUMBER;BEGIN-17-??SELECT?SUM(SALARY),?count(*)?INTO?V_sum,?emp_count????FROM?EMPLOYEES?WHERE?DEPARTMENT_ID=dept_no;??RETURN?v_sum;EXCEPTION???WHEN?NO_DATA_FOUND?THEN???????DBMS_OUTPU
15、T.PUT_LINE('你需要的數(shù)據(jù)不存在!');???WHEN?OTHERS?THEN???????DBMS_OUTPUT.PUT_LINE(SQLCODE
16、
17、'---'
18、
19、SQLERRM);END?get_salary;?2.函數(shù)的調(diào)用函數(shù)聲明時所定義的參數(shù)稱為形式參數(shù),應(yīng)用程序調(diào)用時為函數(shù)傳遞的參數(shù)稱為實際參數(shù)。應(yīng)用程序在調(diào)用函數(shù)時,可以使用以下三種方法向函數(shù)傳遞參數(shù):?第一種參數(shù)傳遞格式:位置表示法。即在調(diào)用時按形參的排列順序,依次寫出實參的名稱,而將形參與實參關(guān)聯(lián)起來進行傳遞。用這種方法
20、進行調(diào)用,形參與實參的名稱是相互獨立,沒有關(guān)系,強調(diào)次序才是重要的。格式為:??????argument_value1[,argument_value2…]?例2:計算某部門的工資總和:?DECLARE??V_num?NUMBER;??V_sum?NUMBER;BEGIN??V_sum?:=get_salary(10,?v_num);??DBMS_OUTPUT.PUT_LINE('部門號為:10的工資總和:'
21、
22、v_sum
23、
24、',人數(shù)為:'
25、
26、v_num);END;?第二種參數(shù)傳遞