資源描述:
《oracle講解_存儲過程的調用》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、一.存儲過程(PROCEDURE)使用過程,不僅可以簡化客戶端應用程序的開發(fā)和維護,而且可以提高應用程序的運行性能.CREATE[ORREPLACE]PROCUDUREprocedure_name(arg1[model1]datatype1,arg2[model2]datatype2)IS[AS]PL/SQLBlock;arg1,arg2用于指定過程的參數(shù),IS/AS用于開始一個PL/SQL塊.當指定參數(shù)數(shù)據(jù)類型時,不能指定其長度.在建立過程的時間,既可以指定輸入?yún)?shù)(IN),也可以指定輸出參數(shù)(OUT)以及輸入輸出參數(shù)(INOUT).
2、如果不定義參數(shù)模式,則默認為輸入?yún)?shù),如果要定義輸出參數(shù),則需要指定OUT關鍵字,如果定義輸入輸出參數(shù),要指定INOUT關鍵字.一般使用execute(或exec)過程名或者call過程名來調用過程.setserveroutputon打開oracle的輸出.(1)不帶參數(shù)的過程CREATEORREPLACEPROCEDUREout_timeISBEGINdbms_output.put_line(systimestamp);END;callout_time();或者execout_time;(2)帶IN參數(shù)的過程如果不指定參數(shù)模式,則默認
3、的為IN,也可以顯示的指定輸入模式IN.CREATEORREPLACEPROCEDUREadd_employee(enoNUMBER,nameVARCHAR2,salNUMBER,jobVARCHAR2DEFAULT'CCC',dnoNUMBER)ISBEGININSERTINTOemp(empno,ename,sal,job,deptno)VALUES(eno,ename,sal,job,dno);EXCEPTIONWHENDUP_VAL_ON_INDEXTHENRAISE_APPLICATION_ERROR(-20000,'雇員不能
4、重復');END;除了默認值的參數(shù)外,其余的都要輸入.(3)帶OUT的過程在過程中輸出結果是使用OUT或者INOUT來完成的.定義輸出參數(shù)的時間,必須要使用OUT來定義輸出.CREATEORREPLACEPROCEDUREquery_employee(enoNUMBER,nameOUTVARCHAR2,salOUTNUMBER)ISBEGINSELECTename,salINTOname,salFROMempWHEREempno=eno;EXCEPTIONWHENNO_DATA_FOUNDTHENRAISE_APPLICATION_ER
5、ROR(-20000,'雇員不存在');END;對于指定為OUT類型的參數(shù),必須定義變量接收輸出參數(shù)的數(shù)據(jù).調用實例:SQL>varnameVARCHAR2(10)SQL>varsalNUMBERSQL>execquery_employee(77,:name,:sal)SQL>printnamesal(4)帶IN和OUT的過程在調用前要通過變量給參數(shù)傳遞數(shù)據(jù),在調用結束后,會通過此變量將值傳遞給應用程序CREATEORPROCEDUREcompute(numINOUTNUMBER,num2INOUTNUMBER)ISv1NUMBER;v
6、2NUMBER;BEGINv1:=num1/num2;v2:=MOD(num1,num2);num1:=v1;num2:=v2;END;在應用程序調用INOUT的存儲過程時,必須提供兩個變量臨時存放數(shù)值,運行如下:SQL>varn1NUMBERSQL>varn2NUMBERSQL>exec:n1:=100SQL>exec:n2:=30SQL>execcompute(:n1,:n2)SQL>PRINTn1n2(5)為參數(shù)傳遞變量和數(shù)據(jù)[1]位置傳遞如SQL>execadd_dept(50,'SALES','NEWYORK')[2]名稱傳遞
7、,使用=>符號來指定值如SQL>execadd_dept(dno=>50)[3]組合傳遞,以上兩種傳遞方法交替(6)查看過程的源代碼過程名,源代碼,執(zhí)行代碼放到了數(shù)據(jù)字典中,通過查詢數(shù)據(jù)字典USER_SOURCE,可以顯示當前用戶定義的過程SELECTtextFROMuser_sourceWHEREname='ADD_DEPT';(7)刪除過程DROPPROCEDURE過程名二.函數(shù)(FUNCTION)CREATE[ORREPLACE]FUNCTIONfunction_name(arg1[model1]datatype1,arg2[mo
8、del2]datatype2)RETURNdatatypeIS
9、ASPL/SQLBlock;arg1,arg2指定函數(shù)的參數(shù),當不指定參數(shù)數(shù)據(jù)類型時,不能指定其長度RETURN指定函數(shù)返回的數(shù)據(jù)類型.注意,