oracle過程、函數(shù)和程序包課件_第1頁
oracle過程、函數(shù)和程序包課件_第2頁
oracle過程、函數(shù)和程序包課件_第3頁
oracle過程、函數(shù)和程序包課件_第4頁
oracle過程、函數(shù)和程序包課件_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

過程、函數(shù)和包過程、函數(shù)和包目標在完成本章學習后,你將掌握下列技能;PL/SQL過程的定義與用法PL/SQL函數(shù)的定義與用法PL/SQL包的定義與用法目標在完成本章學習后,你將掌握下列技能;本章內(nèi)容PL/SQL過程PL/SQL函數(shù)PL/SQL包本章內(nèi)容導航PL/SQL過程PL/SQL函數(shù)PL/SQL包導航PL/SQL過程過程是指用于執(zhí)行特定操作的PL/SQL塊通過使用過程,不僅可以簡化客戶應用的開發(fā)和維護,而且可以提高應用程序的運行性能。語法:CREATE

[ORREPLACE]PROCEDUREprocedure_name(argument1[mode1]datatype1,argument2[mode2]datatype2,…){IS|AS}PL/SQLBlock;其中procedure_name指定過程名,argument指定過程參數(shù);IS或AS用于開始PL/SQL塊。PL/SQL過程過程是指用于執(zhí)行特定操作的PL/SQL塊PL/SQL過程-建立無參數(shù)的過程下面以建立用于輸出當前日期和時間的過程out_time為例。CREATEORREPLACEPROCEDUREout_timeISBEGINDBMS_SESSION.SET_NLS(‘NLS_DATE_FORMAT’,’’’YYYY-MM-DDHH24:MI:SS’’’);DBMS_OUTPUT.PUT_LINE(sysdate);END;/PL/SQL過程-建立無參數(shù)的過程下面以建立用于輸出當前日期PL/SQL過程-建立帶有輸入?yún)?shù)的過程通過使用輸入?yún)?shù),可以將應用程序數(shù)據(jù)傳遞到過程。當定義過程參數(shù)時,默認參數(shù)模式就是輸入?yún)?shù)可以使用IN關鍵字顯式定義輸入?yún)?shù)。PL/SQL過程-建立帶有輸入?yún)?shù)的過程通過使用輸入?yún)?shù),可CREATEORREPLACEPROCEDUREadd_empl(empnoempl.empno%TYPE,enameempl.ename%TYPE,ebirthdayempl.ebirthday%TYPE,egradeempl.egrade%TYPE,ejobempl.ejob%TYPE,emajorempl.emajor%TYPE,indateempl.indate%TYPE,salaryempl.salary%TYPE,allowempl.allow%TYPE,deptnoempl.deptno%TYPE)ISBEGININSERTINTOemplVALUES(empno,ebirthday,ename,ejob,egrade,emajor,indate,salary,allow,depno);END;CREATEORREPLACEPROCEDUREadPL/SQL過程-建立帶有輸出參數(shù)的過程通過使用輸入?yún)?shù),可以將數(shù)據(jù)或消息傳遞到調(diào)用環(huán)境和應用程序。當定義輸出參數(shù)時,需要制定參數(shù)模式為OUT。下面建立用于更新雇員工資并輸出雇員姓名的過程update_sal為例。PL/SQL過程-建立帶有輸出參數(shù)的過程通過使用輸入?yún)?shù),可CREATEORREPLACEPROCEDUREupdate_sal(enovarhcar2,salNUMBER,nameOUTVARCHAR2)ISBEGINUPDATEemplSETsalary=salWHEREempno=enoRETURNINGenameINTOname;END;/CREATEORREPLACEPROCEDUREupPL/SQL過程-建立帶有輸入輸出參數(shù)的過程通過在過程中使用輸入輸出函數(shù),可以調(diào)用過程時輸入數(shù)據(jù)到過程,在調(diào)用結(jié)束后輸出數(shù)據(jù)到調(diào)用環(huán)境和應用程序。當定義輸入輸出參數(shù)時,需要指定參數(shù)模式為INOUT。PL/SQL過程-建立帶有輸入輸出參數(shù)的過程通過在過程中使用CREATEORREPLACEPROCEDUREdevide(num1INOUTNUMBER,num2INOUTNUMBER)ISv1NUMBER;v2NUMBER;BEGINv1:=TRUNC(num1/num2);v2:=MOD(num1,num2);num1:=v1;num2:=v2;END;/CREATEORREPLACEPROCEDUREdePL/SQL過程-調(diào)用過程在SQL*PLUS中調(diào)用過程時,需要使用CALL或者EXECUTE命令;而在PL/SQL塊中過程可以直接應用。過程調(diào)用帶參數(shù)分4種情況:如果無參數(shù),那么可以直接引用過程名;如果有輸入?yún)?shù),那么需要為輸入?yún)?shù)提供數(shù)值;如果帶有輸出參數(shù),那么需要使用變量接收輸出結(jié)果;如果有輸入輸出參數(shù),那么調(diào)用時需要使用具有輸入值的變量。PL/SQL過程-調(diào)用過程在SQL*PLUS中調(diào)用過程時,需PL/SQL過程-調(diào)用無參數(shù)的過程直接引用過程名execout_timePL/SQL過程-調(diào)用無參數(shù)的過程直接引用過程名PL/SQL過程-調(diào)用帶有輸入?yún)?shù)的過程需要為輸入?yún)?shù)提供數(shù)據(jù)值execadd_empl(1111,’1980-3-4’,’lei’,’programmer’,1,7369,SYSDATE,800,null,30)PL/SQL過程-調(diào)用帶有輸入?yún)?shù)的過程需要為輸入?yún)?shù)提供數(shù)PL/SQL過程-調(diào)用帶有輸出參數(shù)的過程需要使用變量接受輸出參數(shù)的數(shù)據(jù)值DECLAREv_nameempl.ename%TYPE;BEGINupdate_sal(&eno,&salary,v_name);DBMS_OUTPUT.PUT_LINE(‘name:’||v_name);END;/輸入雇員號的值:1111輸入工資的值:2500姓名:leiPL/SQL過程-調(diào)用帶有輸出參數(shù)的過程需要使用變量接受輸出PL/SQL過程-調(diào)用帶有輸入輸出參數(shù)的過程調(diào)用之前需要定義變量存放輸入值,并在調(diào)用結(jié)束之后使用變量輸出數(shù)據(jù)。DECLAREn1NUMBER:=&n1;n2NUMBER:=&n2;BEGINdivide(n1,n2);DBMS_OUTPUT.PUT_LINE(‘商:’||n1||’,余數(shù):’||n2);END;/輸入n1的值:100輸入n2的值:30商:3,余數(shù)10PL/SQL過程-調(diào)用帶有輸入輸出參數(shù)的過程調(diào)用之前需要定義為參數(shù)傳遞變量或數(shù)據(jù)當為參數(shù)傳遞變量或數(shù)據(jù),可以采用以下3種方法位置傳遞名稱傳組合傳遞為參數(shù)傳遞變量或數(shù)據(jù)當為參數(shù)傳遞變量或數(shù)據(jù),可以采用以下3種PL/SQL過程-使用位置傳遞為參數(shù)傳遞變量和數(shù)據(jù)位置傳遞是指按照參數(shù)定義順序依次為每個參數(shù)提供變量或者數(shù)據(jù)值當使用位置傳遞時,必須為所有參數(shù)提供變量或者輸入數(shù)據(jù)CALLadd_empl(2222,‘1978-12-2’,’alex’,NULL,1,NULL,SYSDATE,800,NULL,30);PL/SQL過程-使用位置傳遞為參數(shù)傳遞變量和數(shù)據(jù)位置傳遞是PL/SQL過程-使用名稱傳遞為參數(shù)傳遞變量和數(shù)據(jù)名稱傳遞是指通過制定參數(shù)名為其提供變量或者數(shù)據(jù)當使用名稱傳遞時,需要使用=>為參數(shù)提供變量或者數(shù)值execadd_emp(empno=>3333,ebirghday=>,‘1989-2-2’,indate=>null,egrade=>1,ename=>’JOHN’,ejob=>null,major=>null,salary=>null,allow=>null,deptno=>null)PL/SQL過程-使用名稱傳遞為參數(shù)傳遞變量和數(shù)據(jù)名稱傳遞是PL/SQL過程-使用組合傳遞為參數(shù)傳遞變量和數(shù)據(jù)組合傳遞是指在調(diào)用子程序時結(jié)合使用位置傳遞和名稱傳遞execadd_emp(4444,‘1985-2-3’,’AGASI’,‘tester’,1,null,indate=>SYSDATE,salary=>1200,allow=>0,deptno=>30)PL/SQL過程-使用組合傳遞為參數(shù)傳遞變量和數(shù)據(jù)組合傳遞是PL/SQL過程-過程開發(fā)示例為過程參數(shù)指定默認值CREATEORREPLACEPROCEDUREadd_emp(empnoempl,empno%TYPE,ebirthdayempl.ebirthday%TYPE,enameempl.ename%TYPE,ejobempl.ejob%TYPEDEFAULT‘programmer’,egradeempl.egrade%TYPEDEFAULT1,majorempl.mgr%TYPE,indateempl.indate%TYPEDEFAULTSYSDATE,salaryempl.salary%TYPEDEFAULT1000,allowempl.allow%TYPEDEFAULT0,deptnoempl.deptno%TYPE)ISBEGININSERTINTOempVALUES(empno,ebirthday,ename,ejob,egrademajor,indate,salary,allow,deptno);END;/PL/SQL過程-過程開發(fā)示例為過程參數(shù)指定默認值PL/SQL過程-使用異常處理CREATEORREPLACEPROCEDUREupdate_sal(nameempl.ename%TYPE,salempl.salary%TYPE)ISe_no_rowsEXCEPTION;BEGINUPDATEemplSETsalary=salWHERELOWER(ename)=LOWER(name);IFSQL%NOTFOUNDTHENRAISEe_no_rows;ENDIF;EXCEPTIONWHENe_no_rowsTHENDBMS_OUTPUT.PUT_LINE(‘這雇員不存在’);END;Execupdate_sal(‘jarbus’,1500)這雇員不存在Execupdate_sal(‘a(chǎn)llen’,1500)PL/SQL過程-使用異常處理CREATEORREPLAPL/SQL過程-維護過程刪除過程DROPPROCEDURE顯示編譯錯誤,查詢數(shù)據(jù)字典USER_ERRORS,或者執(zhí)行SHOWERRORS命令。確定過程狀態(tài),查詢數(shù)據(jù)字典USER_OBJECTS。編譯過程,ALTERPROCEDURE…COMPILE;查看過程代碼,通過查詢數(shù)據(jù)字典USER_SOURCE。PL/SQL過程-維護過程刪除過程DROPPROCED導航PL/SQL過程PL/SQL函數(shù)PL/SQL包導航函數(shù)函數(shù)是一種命名存儲塊,可以接收輸入并進行定義的邏輯處理以后把結(jié)果返回給調(diào)用者。與過程相似,只是函數(shù)必須有返回值。函數(shù)函數(shù)是一種命名存儲塊,可以接收輸入并進行定義的邏輯處理以函數(shù)-創(chuàng)建基本語法CREATE[ORREPLACE]FUNCTIONfunction_name[(parameter[{IN|INOUT}]date_type1,parameter[{IN|INOUT}]date_type2,…]RETURNreturn_type;{IS|AS}declarationsectionBEGINexecutablestatementsEXCEPTIONexceptionhandlers;END[function_name];

函數(shù)-創(chuàng)建基本語法函數(shù)-例子

下列是求從1到某個數(shù)累加的例子CREATEORREPLACEFUNCTIONsum(nINnumber)RETURNnumberASresultnumber:=0;BEGINFORiin1…nLOOPresult:=result+i;ENDLOOP;return(result);ENDsum;函數(shù)-例子下列是求從1到某個數(shù)累加的例子函數(shù)-調(diào)用調(diào)用函數(shù)的時候需要保存返回值例子DECLAREnum1number:=10;sum1number:=0;BEGINsum1:=sum(num1);DBMS_OUTPUT.PUT_LINE(“result=“||sum1);函數(shù)-調(diào)用調(diào)用函數(shù)的時候需要保存返回值導航PL/SQL過程PL/SQL函數(shù)PL/SQL包導航PL/SQL包包用于邏輯組合相關的自定義類型、常量、變量、游標、過程和函數(shù)。簡化了客戶應用開發(fā),提高性能,實現(xiàn)信息隱藏、子程序重載等功能。PL/SQL包包用于邏輯組合相關的自定義類型、常量、變量、游PL/SQL包-規(guī)范包規(guī)范用于定義包的公用組件,包括常量、變量、游標、自定義類型、過程和函數(shù)等。建立包規(guī)范語法CREATE[ORREPLACE]PACKAGEpackage_nameIS|AS--定義公用常量、變量等

--定義公用過程和函數(shù)等。ENDpackage_name;PL/SQL包-規(guī)范包規(guī)范用于定義包的公用組件,包括常量、變PL/SQL包-例子CREATEORREPLACEPACKAGEemp_packageISg_deptnoempl.deptno%TYPE:=30;PROCEDUREadd_employee(empnoempl.empno%TYPE,ebirthdayempl.ebirthday%TYPE,enameempl.ename%TYPE,ejobempl.ejob%TYPEDEFAULT‘programmer’,egradeempl.egrade%TYPE,majorempl.mgr%TYPE,indateempl.indate%TYPEDEFAULTSYSDATE,salaryempl.salary%TYPEDEFAULT1000,allowempl.allow%TYPE,deptnoempl.deptno%TYPEDEFAULTg_deptno);PROCEDUREfire_employee(enoNUMBER);FUNCTIONget_sal(enoNUMBER)RETURNNUMBER;ENDemp_package;PL/SQL包-例子CREATEORREPLACEPAPL/SQL包-建立包體包體用于實現(xiàn)包規(guī)范所定義的公用過程和函數(shù),包體不僅可用與實現(xiàn)公用過程和函數(shù),而且可以定義包的私有組件(變量、常量等)建立包體語法CREATE[ORREPLACE]PACKAGEBODY

package_nameIS|AS--定義私有變量、常量等--實現(xiàn)公用過程和函數(shù)ENDpackage_name;PL/SQL包-建立包體包體用于實現(xiàn)包規(guī)范所定義的公用過程和PL/SQL包-例子CREATEORREPLACEPACKAGEBODYemp_packageISFUNCTIONvalidate_deptno(dnoempl.deptno%TYPE)RETURNBOOLEANIStempINT;BEGINSELECT1INTOtempFROMdeptWHEREdeptno=dno;RETURNTRUE;EXCEPTIONWHENNO_DATA_FOUNDTHENRETURNFALSE;END;PROZCEDUREadd_employee(empnoempl.empno%TYPE,ebirthdayempl.ebirthday%TYPE,enameempl.ename%TYPE,ejobempl.ejob%TYPEDEFAULT‘programmer’,egradeempl.egrade%TYPE,majorempl.mgr%TYPE,indateempl.indate%TYPEDEFAULTSYSDATE,salaryempl.salary%TYPEDEFAULT1000,allowempl.allow%TYPE,deptnoempl.deptno%TYPEDEFAULTg_deptno);PL/SQL包-例子CREATEORREPLACEPAISBEGINIFvalidate_deptno(deptno)THENINSERTINTOempVALUES(empno,ebirthday,ename,ejob,egrade,major,indate,salary,allow,deptno);ENDIF;END;PROCEDUREfire_employee(enoNUMBER)ISBEGINFUNCTIONget_sal(enoNUMBER)RETURNNUMBERISv_salempl.salary%TYPE;BEGINSELECTsalaryINTOv_salFROMemplWHEREempno=eno;RETURNv_sal;END;ENDemp_package;ISPL/SQL包-調(diào)用包組件

調(diào)用包公用變量例子:emp_package.g_deptno:=20調(diào)用包公用過程例子:emp_package.g_deptno:=20emp_package.add_employee(1566,’1982-9-12’,’MARY’,1,major=>7788,comm=>0);selectename,deptnoFROMemplWHEREempno=1566執(zhí)行結(jié)果:

ENAMEDEPTNO-------------------------------------MARY20PL/SQL包-調(diào)用包組件調(diào)用包公用變量調(diào)用包公用函數(shù)例子:

VARsalaryNUMBERexec:salary:=emp_package.get_sal(1566)PRINTsalary

執(zhí)行結(jié)果:salary-----------2975調(diào)用包公用函數(shù)本章內(nèi)容回顧

掌握過程的用法掌握函數(shù)的用法掌握包的用法本章內(nèi)容回顧

掌握過程的用法過程、函數(shù)和包過程、函數(shù)和包目標在完成本章學習后,你將掌握下列技能;PL/SQL過程的定義與用法PL/SQL函數(shù)的定義與用法PL/SQL包的定義與用法目標在完成本章學習后,你將掌握下列技能;本章內(nèi)容PL/SQL過程PL/SQL函數(shù)PL/SQL包本章內(nèi)容導航PL/SQL過程PL/SQL函數(shù)PL/SQL包導航PL/SQL過程過程是指用于執(zhí)行特定操作的PL/SQL塊通過使用過程,不僅可以簡化客戶應用的開發(fā)和維護,而且可以提高應用程序的運行性能。語法:CREATE

[ORREPLACE]PROCEDUREprocedure_name(argument1[mode1]datatype1,argument2[mode2]datatype2,…){IS|AS}PL/SQLBlock;其中procedure_name指定過程名,argument指定過程參數(shù);IS或AS用于開始PL/SQL塊。PL/SQL過程過程是指用于執(zhí)行特定操作的PL/SQL塊PL/SQL過程-建立無參數(shù)的過程下面以建立用于輸出當前日期和時間的過程out_time為例。CREATEORREPLACEPROCEDUREout_timeISBEGINDBMS_SESSION.SET_NLS(‘NLS_DATE_FORMAT’,’’’YYYY-MM-DDHH24:MI:SS’’’);DBMS_OUTPUT.PUT_LINE(sysdate);END;/PL/SQL過程-建立無參數(shù)的過程下面以建立用于輸出當前日期PL/SQL過程-建立帶有輸入?yún)?shù)的過程通過使用輸入?yún)?shù),可以將應用程序數(shù)據(jù)傳遞到過程。當定義過程參數(shù)時,默認參數(shù)模式就是輸入?yún)?shù)可以使用IN關鍵字顯式定義輸入?yún)?shù)。PL/SQL過程-建立帶有輸入?yún)?shù)的過程通過使用輸入?yún)?shù),可CREATEORREPLACEPROCEDUREadd_empl(empnoempl.empno%TYPE,enameempl.ename%TYPE,ebirthdayempl.ebirthday%TYPE,egradeempl.egrade%TYPE,ejobempl.ejob%TYPE,emajorempl.emajor%TYPE,indateempl.indate%TYPE,salaryempl.salary%TYPE,allowempl.allow%TYPE,deptnoempl.deptno%TYPE)ISBEGININSERTINTOemplVALUES(empno,ebirthday,ename,ejob,egrade,emajor,indate,salary,allow,depno);END;CREATEORREPLACEPROCEDUREadPL/SQL過程-建立帶有輸出參數(shù)的過程通過使用輸入?yún)?shù),可以將數(shù)據(jù)或消息傳遞到調(diào)用環(huán)境和應用程序。當定義輸出參數(shù)時,需要制定參數(shù)模式為OUT。下面建立用于更新雇員工資并輸出雇員姓名的過程update_sal為例。PL/SQL過程-建立帶有輸出參數(shù)的過程通過使用輸入?yún)?shù),可CREATEORREPLACEPROCEDUREupdate_sal(enovarhcar2,salNUMBER,nameOUTVARCHAR2)ISBEGINUPDATEemplSETsalary=salWHEREempno=enoRETURNINGenameINTOname;END;/CREATEORREPLACEPROCEDUREupPL/SQL過程-建立帶有輸入輸出參數(shù)的過程通過在過程中使用輸入輸出函數(shù),可以調(diào)用過程時輸入數(shù)據(jù)到過程,在調(diào)用結(jié)束后輸出數(shù)據(jù)到調(diào)用環(huán)境和應用程序。當定義輸入輸出參數(shù)時,需要指定參數(shù)模式為INOUT。PL/SQL過程-建立帶有輸入輸出參數(shù)的過程通過在過程中使用CREATEORREPLACEPROCEDUREdevide(num1INOUTNUMBER,num2INOUTNUMBER)ISv1NUMBER;v2NUMBER;BEGINv1:=TRUNC(num1/num2);v2:=MOD(num1,num2);num1:=v1;num2:=v2;END;/CREATEORREPLACEPROCEDUREdePL/SQL過程-調(diào)用過程在SQL*PLUS中調(diào)用過程時,需要使用CALL或者EXECUTE命令;而在PL/SQL塊中過程可以直接應用。過程調(diào)用帶參數(shù)分4種情況:如果無參數(shù),那么可以直接引用過程名;如果有輸入?yún)?shù),那么需要為輸入?yún)?shù)提供數(shù)值;如果帶有輸出參數(shù),那么需要使用變量接收輸出結(jié)果;如果有輸入輸出參數(shù),那么調(diào)用時需要使用具有輸入值的變量。PL/SQL過程-調(diào)用過程在SQL*PLUS中調(diào)用過程時,需PL/SQL過程-調(diào)用無參數(shù)的過程直接引用過程名execout_timePL/SQL過程-調(diào)用無參數(shù)的過程直接引用過程名PL/SQL過程-調(diào)用帶有輸入?yún)?shù)的過程需要為輸入?yún)?shù)提供數(shù)據(jù)值execadd_empl(1111,’1980-3-4’,’lei’,’programmer’,1,7369,SYSDATE,800,null,30)PL/SQL過程-調(diào)用帶有輸入?yún)?shù)的過程需要為輸入?yún)?shù)提供數(shù)PL/SQL過程-調(diào)用帶有輸出參數(shù)的過程需要使用變量接受輸出參數(shù)的數(shù)據(jù)值DECLAREv_nameempl.ename%TYPE;BEGINupdate_sal(&eno,&salary,v_name);DBMS_OUTPUT.PUT_LINE(‘name:’||v_name);END;/輸入雇員號的值:1111輸入工資的值:2500姓名:leiPL/SQL過程-調(diào)用帶有輸出參數(shù)的過程需要使用變量接受輸出PL/SQL過程-調(diào)用帶有輸入輸出參數(shù)的過程調(diào)用之前需要定義變量存放輸入值,并在調(diào)用結(jié)束之后使用變量輸出數(shù)據(jù)。DECLAREn1NUMBER:=&n1;n2NUMBER:=&n2;BEGINdivide(n1,n2);DBMS_OUTPUT.PUT_LINE(‘商:’||n1||’,余數(shù):’||n2);END;/輸入n1的值:100輸入n2的值:30商:3,余數(shù)10PL/SQL過程-調(diào)用帶有輸入輸出參數(shù)的過程調(diào)用之前需要定義為參數(shù)傳遞變量或數(shù)據(jù)當為參數(shù)傳遞變量或數(shù)據(jù),可以采用以下3種方法位置傳遞名稱傳組合傳遞為參數(shù)傳遞變量或數(shù)據(jù)當為參數(shù)傳遞變量或數(shù)據(jù),可以采用以下3種PL/SQL過程-使用位置傳遞為參數(shù)傳遞變量和數(shù)據(jù)位置傳遞是指按照參數(shù)定義順序依次為每個參數(shù)提供變量或者數(shù)據(jù)值當使用位置傳遞時,必須為所有參數(shù)提供變量或者輸入數(shù)據(jù)CALLadd_empl(2222,‘1978-12-2’,’alex’,NULL,1,NULL,SYSDATE,800,NULL,30);PL/SQL過程-使用位置傳遞為參數(shù)傳遞變量和數(shù)據(jù)位置傳遞是PL/SQL過程-使用名稱傳遞為參數(shù)傳遞變量和數(shù)據(jù)名稱傳遞是指通過制定參數(shù)名為其提供變量或者數(shù)據(jù)當使用名稱傳遞時,需要使用=>為參數(shù)提供變量或者數(shù)值execadd_emp(empno=>3333,ebirghday=>,‘1989-2-2’,indate=>null,egrade=>1,ename=>’JOHN’,ejob=>null,major=>null,salary=>null,allow=>null,deptno=>null)PL/SQL過程-使用名稱傳遞為參數(shù)傳遞變量和數(shù)據(jù)名稱傳遞是PL/SQL過程-使用組合傳遞為參數(shù)傳遞變量和數(shù)據(jù)組合傳遞是指在調(diào)用子程序時結(jié)合使用位置傳遞和名稱傳遞execadd_emp(4444,‘1985-2-3’,’AGASI’,‘tester’,1,null,indate=>SYSDATE,salary=>1200,allow=>0,deptno=>30)PL/SQL過程-使用組合傳遞為參數(shù)傳遞變量和數(shù)據(jù)組合傳遞是PL/SQL過程-過程開發(fā)示例為過程參數(shù)指定默認值CREATEORREPLACEPROCEDUREadd_emp(empnoempl,empno%TYPE,ebirthdayempl.ebirthday%TYPE,enameempl.ename%TYPE,ejobempl.ejob%TYPEDEFAULT‘programmer’,egradeempl.egrade%TYPEDEFAULT1,majorempl.mgr%TYPE,indateempl.indate%TYPEDEFAULTSYSDATE,salaryempl.salary%TYPEDEFAULT1000,allowempl.allow%TYPEDEFAULT0,deptnoempl.deptno%TYPE)ISBEGININSERTINTOempVALUES(empno,ebirthday,ename,ejob,egrademajor,indate,salary,allow,deptno);END;/PL/SQL過程-過程開發(fā)示例為過程參數(shù)指定默認值PL/SQL過程-使用異常處理CREATEORREPLACEPROCEDUREupdate_sal(nameempl.ename%TYPE,salempl.salary%TYPE)ISe_no_rowsEXCEPTION;BEGINUPDATEemplSETsalary=salWHERELOWER(ename)=LOWER(name);IFSQL%NOTFOUNDTHENRAISEe_no_rows;ENDIF;EXCEPTIONWHENe_no_rowsTHENDBMS_OUTPUT.PUT_LINE(‘這雇員不存在’);END;Execupdate_sal(‘jarbus’,1500)這雇員不存在Execupdate_sal(‘a(chǎn)llen’,1500)PL/SQL過程-使用異常處理CREATEORREPLAPL/SQL過程-維護過程刪除過程DROPPROCEDURE顯示編譯錯誤,查詢數(shù)據(jù)字典USER_ERRORS,或者執(zhí)行SHOWERRORS命令。確定過程狀態(tài),查詢數(shù)據(jù)字典USER_OBJECTS。編譯過程,ALTERPROCEDURE…COMPILE;查看過程代碼,通過查詢數(shù)據(jù)字典USER_SOURCE。PL/SQL過程-維護過程刪除過程DROPPROCED導航PL/SQL過程PL/SQL函數(shù)PL/SQL包導航函數(shù)函數(shù)是一種命名存儲塊,可以接收輸入并進行定義的邏輯處理以后把結(jié)果返回給調(diào)用者。與過程相似,只是函數(shù)必須有返回值。函數(shù)函數(shù)是一種命名存儲塊,可以接收輸入并進行定義的邏輯處理以函數(shù)-創(chuàng)建基本語法CREATE[ORREPLACE]FUNCTIONfunction_name[(parameter[{IN|INOUT}]date_type1,parameter[{IN|INOUT}]date_type2,…]RETURNreturn_type;{IS|AS}declarationsectionBEGINexecutablestatementsEXCEPTIONexceptionhandlers;END[function_name];

函數(shù)-創(chuàng)建基本語法函數(shù)-例子

下列是求從1到某個數(shù)累加的例子CREATEORREPLACEFUNCTIONsum(nINnumber)RETURNnumberASresultnumber:=0;BEGINFORiin1…nLOOPresult:=result+i;ENDLOOP;return(result);ENDsum;函數(shù)-例子下列是求從1到某個數(shù)累加的例子函數(shù)-調(diào)用調(diào)用函數(shù)的時候需要保存返回值例子DECLAREnum1number:=10;sum1number:=0;BEGINsum1:=sum(num1);DBMS_OUTPUT.PUT_LINE(“result=“||sum1);函數(shù)-調(diào)用調(diào)用函數(shù)的時候需要保存返回值導航PL/SQL過程PL/SQL函數(shù)PL/SQL包導航PL/SQL包包用于邏輯組合相關的自定義類型、常量、變量、游標、過程和函數(shù)。簡化了客戶應用開發(fā),提高性能,實現(xiàn)信息隱藏、子程序重載等功能。PL/SQL包包用于邏輯組合相關的自定義類型、常量、變量、游PL/SQL包-規(guī)范包規(guī)范用于定義包的公用組件,包括常量、變量、游標、自定義類型、過程和函數(shù)等。建立包規(guī)范語法CREATE[ORREPLACE]PACKAGEpackage_nameIS|AS--定義公用常量、變量等

--定義公用過程和函數(shù)等。ENDpackage_name;PL/SQL包-規(guī)范包規(guī)范用于定義包的公用組件,包括常量、變PL/SQL包-例子CREATEORREPLACEPACKAGEemp_packageISg_deptnoempl.deptno%TYPE:=30;PROCEDUREadd_employee(empnoempl.empno%TYPE,ebirthdayempl.ebirthday%TYPE,enameempl.ename%TYPE,ejobempl.ejob%TYPEDEFAULT‘programmer’,egradeempl.egrade%TYPE,majorempl.mgr%TYPE,indateempl.indate%TYPEDEFAULTSYSDATE,salaryempl.salary%TYPEDEFAULT1000,allowempl.allow%TYPE,deptnoempl.deptno%TYPEDEFAULTg_deptno);PROCEDUREfire_employee(enoNUMBER);FUNCTIONget_sal(enoNUMBER)RETURNNUMBER;ENDemp_package;PL/SQL包-例子CREATEORREPLACEPAPL/SQL包-建立包體包體用于實現(xiàn)包規(guī)范所定義的公用過程和函數(shù),包體不僅可用與實現(xiàn)公用過程和函數(shù),而且可以定義包的私有組件(變量、常量等)建立包體語法CREATE[ORREPL

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論