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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

[ORREPLACE]PROCEDUREprocedure_name(argument1[mode1]datatype1,argument2[mode2]datatype2,…){IS|AS}PL/SQLBlock;其中procedure_name指定過(guò)程名,argument指定過(guò)程參數(shù);IS或AS用于開(kāi)始PL/SQL塊。PL/SQL過(guò)程過(guò)程是指用于執(zhí)行特定操作的PL/SQL塊PL/SQL過(guò)程-建立無(wú)參數(shù)的過(guò)程下面以建立用于輸出當(dāng)前日期和時(shí)間的過(guò)程out_time為例。CREATEORREPLACEPROCEDUREout_timeISBEGINDBMS_SESSION.SET_NLS(‘NLS_DATE_FORMAT’,’’’YYYY-MM-DDHH24:MI:SS’’’);DBMS_OUTPUT.PUT_LINE(sysdate);END;/PL/SQL過(guò)程-建立無(wú)參數(shù)的過(guò)程下面以建立用于輸出當(dāng)前日期PL/SQL過(guò)程-建立帶有輸入?yún)?shù)的過(guò)程通過(guò)使用輸入?yún)?shù),可以將應(yīng)用程序數(shù)據(jù)傳遞到過(guò)程。當(dāng)定義過(guò)程參數(shù)時(shí),默認(rèn)參數(shù)模式就是輸入?yún)?shù)可以使用IN關(guān)鍵字顯式定義輸入?yún)?shù)。PL/SQL過(guò)程-建立帶有輸入?yún)?shù)的過(guò)程通過(guò)使用輸入?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過(guò)程-建立帶有輸出參數(shù)的過(guò)程通過(guò)使用輸入?yún)?shù),可以將數(shù)據(jù)或消息傳遞到調(diào)用環(huán)境和應(yīng)用程序。當(dāng)定義輸出參數(shù)時(shí),需要制定參數(shù)模式為OUT。下面建立用于更新雇員工資并輸出雇員姓名的過(guò)程update_sal為例。PL/SQL過(guò)程-建立帶有輸出參數(shù)的過(guò)程通過(guò)使用輸入?yún)?shù),可CREATEORREPLACEPROCEDUREupdate_sal(enovarhcar2,salNUMBER,nameOUTVARCHAR2)ISBEGINUPDATEemplSETsalary=salWHEREempno=enoRETURNINGenameINTOname;END;/CREATEORREPLACEPROCEDUREupPL/SQL過(guò)程-建立帶有輸入輸出參數(shù)的過(guò)程通過(guò)在過(guò)程中使用輸入輸出函數(shù),可以調(diào)用過(guò)程時(shí)輸入數(shù)據(jù)到過(guò)程,在調(diào)用結(jié)束后輸出數(shù)據(jù)到調(diào)用環(huán)境和應(yīng)用程序。當(dāng)定義輸入輸出參數(shù)時(shí),需要指定參數(shù)模式為INOUT。PL/SQL過(guò)程-建立帶有輸入輸出參數(shù)的過(guò)程通過(guò)在過(guò)程中使用CREATEORREPLACEPROCEDUREdevide(num1INOUTNUMBER,num2INOUTNUMBER)ISv1NUMBER;v2NUMBER;BEGINv1:=TRUNC(num1/num2);v2:=MOD(num1,num2);num1:=v1;num2:=v2;END;/CREATEORREPLACEPROCEDUREdePL/SQL過(guò)程-調(diào)用過(guò)程在SQL*PLUS中調(diào)用過(guò)程時(shí),需要使用CALL或者EXECUTE命令;而在PL/SQL塊中過(guò)程可以直接應(yīng)用。過(guò)程調(diào)用帶參數(shù)分4種情況:如果無(wú)參數(shù),那么可以直接引用過(guò)程名;如果有輸入?yún)?shù),那么需要為輸入?yún)?shù)提供數(shù)值;如果帶有輸出參數(shù),那么需要使用變量接收輸出結(jié)果;如果有輸入輸出參數(shù),那么調(diào)用時(shí)需要使用具有輸入值的變量。PL/SQL過(guò)程-調(diào)用過(guò)程在SQL*PLUS中調(diào)用過(guò)程時(shí),需PL/SQL過(guò)程-調(diào)用無(wú)參數(shù)的過(guò)程直接引用過(guò)程名execout_timePL/SQL過(guò)程-調(diào)用無(wú)參數(shù)的過(guò)程直接引用過(guò)程名PL/SQL過(guò)程-調(diào)用帶有輸入?yún)?shù)的過(guò)程需要為輸入?yún)?shù)提供數(shù)據(jù)值execadd_empl(1111,’1980-3-4’,’lei’,’programmer’,1,7369,SYSDATE,800,null,30)PL/SQL過(guò)程-調(diào)用帶有輸入?yún)?shù)的過(guò)程需要為輸入?yún)?shù)提供數(shù)PL/SQL過(guò)程-調(diào)用帶有輸出參數(shù)的過(guò)程需要使用變量接受輸出參數(shù)的數(shù)據(jù)值DECLAREv_nameempl.ename%TYPE;BEGINupdate_sal(&eno,&salary,v_name);DBMS_OUTPUT.PUT_LINE(‘name:’||v_name);END;/輸入雇員號(hào)的值:1111輸入工資的值:2500姓名:leiPL/SQL過(guò)程-調(diào)用帶有輸出參數(shù)的過(guò)程需要使用變量接受輸出PL/SQL過(guò)程-調(diào)用帶有輸入輸出參數(shù)的過(guò)程調(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過(guò)程-調(diào)用帶有輸入輸出參數(shù)的過(guò)程調(diào)用之前需要定義為參數(shù)傳遞變量或數(shù)據(jù)當(dāng)為參數(shù)傳遞變量或數(shù)據(jù),可以采用以下3種方法位置傳遞名稱傳組合傳遞為參數(shù)傳遞變量或數(shù)據(jù)當(dāng)為參數(shù)傳遞變量或數(shù)據(jù),可以采用以下3種PL/SQL過(guò)程-使用位置傳遞為參數(shù)傳遞變量和數(shù)據(jù)位置傳遞是指按照參數(shù)定義順序依次為每個(gè)參數(shù)提供變量或者數(shù)據(jù)值當(dāng)使用位置傳遞時(shí),必須為所有參數(shù)提供變量或者輸入數(shù)據(jù)CALLadd_empl(2222,‘1978-12-2’,’alex’,NULL,1,NULL,SYSDATE,800,NULL,30);PL/SQL過(guò)程-使用位置傳遞為參數(shù)傳遞變量和數(shù)據(jù)位置傳遞是PL/SQL過(guò)程-使用名稱傳遞為參數(shù)傳遞變量和數(shù)據(jù)名稱傳遞是指通過(guò)制定參數(shù)名為其提供變量或者數(shù)據(jù)當(dāng)使用名稱傳遞時(shí),需要使用=>為參數(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過(guò)程-使用名稱傳遞為參數(shù)傳遞變量和數(shù)據(jù)名稱傳遞是PL/SQL過(guò)程-使用組合傳遞為參數(shù)傳遞變量和數(shù)據(jù)組合傳遞是指在調(diào)用子程序時(shí)結(jié)合使用位置傳遞和名稱傳遞execadd_emp(4444,‘1985-2-3’,’AGASI’,‘tester’,1,null,indate=>SYSDATE,salary=>1200,allow=>0,deptno=>30)PL/SQL過(guò)程-使用組合傳遞為參數(shù)傳遞變量和數(shù)據(jù)組合傳遞是PL/SQL過(guò)程-過(guò)程開(kāi)發(fā)示例為過(guò)程參數(shù)指定默認(rèn)值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過(guò)程-過(guò)程開(kāi)發(fā)示例為過(guò)程參數(shù)指定默認(rèn)值PL/SQL過(guò)程-使用異常處理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過(guò)程-使用異常處理CREATEORREPLAPL/SQL過(guò)程-維護(hù)過(guò)程刪除過(guò)程DROPPROCEDURE顯示編譯錯(cuò)誤,查詢數(shù)據(jù)字典USER_ERRORS,或者執(zhí)行SHOWERRORS命令。確定過(guò)程狀態(tài),查詢數(shù)據(jù)字典USER_OBJECTS。編譯過(guò)程,ALTERPROCEDURE…COMPILE;查看過(guò)程代碼,通過(guò)查詢數(shù)據(jù)字典USER_SOURCE。PL/SQL過(guò)程-維護(hù)過(guò)程刪除過(guò)程DROPPROCED導(dǎo)航PL/SQL過(guò)程PL/SQL函數(shù)PL/SQL包導(dǎo)航函數(shù)函數(shù)是一種命名存儲(chǔ)塊,可以接收輸入并進(jìn)行定義的邏輯處理以后把結(jié)果返回給調(diào)用者。與過(guò)程相似,只是函數(shù)必須有返回值。函數(shù)函數(shù)是一種命名存儲(chǔ)塊,可以接收輸入并進(jìn)行定義的邏輯處理以函數(shù)-創(chuàng)建基本語(yǔ)法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)建基本語(yǔ)法函數(shù)-例子

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

--定義公用過(guò)程和函數(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包-建立包體包體用于實(shí)現(xiàn)包規(guī)范所定義的公用過(guò)程和函數(shù),包體不僅可用與實(shí)現(xiàn)公用過(guò)程和函數(shù),而且可以定義包的私有組件(變量、常量等)建立包體語(yǔ)法CREATE[ORREPLACE]PACKAGEBODY

package_nameIS|AS--定義私有變量、常量等--實(shí)現(xiàn)公用過(guò)程和函數(shù)ENDpackage_name;PL/SQL包-建立包體包體用于實(shí)現(xiàn)包規(guī)范所定義的公用過(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)用包公用過(guò)程例子: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)容回顧

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

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

[ORREPLACE]PROCEDUREprocedure_name(argument1[mode1]datatype1,argument2[mode2]datatype2,…){IS|AS}PL/SQLBlock;其中procedure_name指定過(guò)程名,argument指定過(guò)程參數(shù);IS或AS用于開(kāi)始PL/SQL塊。PL/SQL過(guò)程過(guò)程是指用于執(zhí)行特定操作的PL/SQL塊PL/SQL過(guò)程-建立無(wú)參數(shù)的過(guò)程下面以建立用于輸出當(dāng)前日期和時(shí)間的過(guò)程out_time為例。CREATEORREPLACEPROCEDUREout_timeISBEGINDBMS_SESSION.SET_NLS(‘NLS_DATE_FORMAT’,’’’YYYY-MM-DDHH24:MI:SS’’’);DBMS_OUTPUT.PUT_LINE(sysdate);END;/PL/SQL過(guò)程-建立無(wú)參數(shù)的過(guò)程下面以建立用于輸出當(dāng)前日期PL/SQL過(guò)程-建立帶有輸入?yún)?shù)的過(guò)程通過(guò)使用輸入?yún)?shù),可以將應(yīng)用程序數(shù)據(jù)傳遞到過(guò)程。當(dāng)定義過(guò)程參數(shù)時(shí),默認(rèn)參數(shù)模式就是輸入?yún)?shù)可以使用IN關(guān)鍵字顯式定義輸入?yún)?shù)。PL/SQL過(guò)程-建立帶有輸入?yún)?shù)的過(guò)程通過(guò)使用輸入?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過(guò)程-建立帶有輸出參數(shù)的過(guò)程通過(guò)使用輸入?yún)?shù),可以將數(shù)據(jù)或消息傳遞到調(diào)用環(huán)境和應(yīng)用程序。當(dāng)定義輸出參數(shù)時(shí),需要制定參數(shù)模式為OUT。下面建立用于更新雇員工資并輸出雇員姓名的過(guò)程update_sal為例。PL/SQL過(guò)程-建立帶有輸出參數(shù)的過(guò)程通過(guò)使用輸入?yún)?shù),可CREATEORREPLACEPROCEDUREupdate_sal(enovarhcar2,salNUMBER,nameOUTVARCHAR2)ISBEGINUPDATEemplSETsalary=salWHEREempno=enoRETURNINGenameINTOname;END;/CREATEORREPLACEPROCEDUREupPL/SQL過(guò)程-建立帶有輸入輸出參數(shù)的過(guò)程通過(guò)在過(guò)程中使用輸入輸出函數(shù),可以調(diào)用過(guò)程時(shí)輸入數(shù)據(jù)到過(guò)程,在調(diào)用結(jié)束后輸出數(shù)據(jù)到調(diào)用環(huán)境和應(yīng)用程序。當(dāng)定義輸入輸出參數(shù)時(shí),需要指定參數(shù)模式為INOUT。PL/SQL過(guò)程-建立帶有輸入輸出參數(shù)的過(guò)程通過(guò)在過(guò)程中使用CREATEORREPLACEPROCEDUREdevide(num1INOUTNUMBER,num2INOUTNUMBER)ISv1NUMBER;v2NUMBER;BEGINv1:=TRUNC(num1/num2);v2:=MOD(num1,num2);num1:=v1;num2:=v2;END;/CREATEORREPLACEPROCEDUREdePL/SQL過(guò)程-調(diào)用過(guò)程在SQL*PLUS中調(diào)用過(guò)程時(shí),需要使用CALL或者EXECUTE命令;而在PL/SQL塊中過(guò)程可以直接應(yīng)用。過(guò)程調(diào)用帶參數(shù)分4種情況:如果無(wú)參數(shù),那么可以直接引用過(guò)程名;如果有輸入?yún)?shù),那么需要為輸入?yún)?shù)提供數(shù)值;如果帶有輸出參數(shù),那么需要使用變量接收輸出結(jié)果;如果有輸入輸出參數(shù),那么調(diào)用時(shí)需要使用具有輸入值的變量。PL/SQL過(guò)程-調(diào)用過(guò)程在SQL*PLUS中調(diào)用過(guò)程時(shí),需PL/SQL過(guò)程-調(diào)用無(wú)參數(shù)的過(guò)程直接引用過(guò)程名execout_timePL/SQL過(guò)程-調(diào)用無(wú)參數(shù)的過(guò)程直接引用過(guò)程名PL/SQL過(guò)程-調(diào)用帶有輸入?yún)?shù)的過(guò)程需要為輸入?yún)?shù)提供數(shù)據(jù)值execadd_empl(1111,’1980-3-4’,’lei’,’programmer’,1,7369,SYSDATE,800,null,30)PL/SQL過(guò)程-調(diào)用帶有輸入?yún)?shù)的過(guò)程需要為輸入?yún)?shù)提供數(shù)PL/SQL過(guò)程-調(diào)用帶有輸出參數(shù)的過(guò)程需要使用變量接受輸出參數(shù)的數(shù)據(jù)值DECLAREv_nameempl.ename%TYPE;BEGINupdate_sal(&eno,&salary,v_name);DBMS_OUTPUT.PUT_LINE(‘name:’||v_name);END;/輸入雇員號(hào)的值:1111輸入工資的值:2500姓名:leiPL/SQL過(guò)程-調(diào)用帶有輸出參數(shù)的過(guò)程需要使用變量接受輸出PL/SQL過(guò)程-調(diào)用帶有輸入輸出參數(shù)的過(guò)程調(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過(guò)程-調(diào)用帶有輸入輸出參數(shù)的過(guò)程調(diào)用之前需要定義為參數(shù)傳遞變量或數(shù)據(jù)當(dāng)為參數(shù)傳遞變量或數(shù)據(jù),可以采用以下3種方法位置傳遞名稱傳組合傳遞為參數(shù)傳遞變量或數(shù)據(jù)當(dāng)為參數(shù)傳遞變量或數(shù)據(jù),可以采用以下3種PL/SQL過(guò)程-使用位置傳遞為參數(shù)傳遞變量和數(shù)據(jù)位置傳遞是指按照參數(shù)定義順序依次為每個(gè)參數(shù)提供變量或者數(shù)據(jù)值當(dāng)使用位置傳遞時(shí),必須為所有參數(shù)提供變量或者輸入數(shù)據(jù)CALLadd_empl(2222,‘1978-12-2’,’alex’,NULL,1,NULL,SYSDATE,800,NULL,30);PL/SQL過(guò)程-使用位置傳遞為參數(shù)傳遞變量和數(shù)據(jù)位置傳遞是PL/SQL過(guò)程-使用名稱傳遞為參數(shù)傳遞變量和數(shù)據(jù)名稱傳遞是指通過(guò)制定參數(shù)名為其提供變量或者數(shù)據(jù)當(dāng)使用名稱傳遞時(shí),需要使用=>為參數(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過(guò)程-使用名稱傳遞為參數(shù)傳遞變量和數(shù)據(jù)名稱傳遞是PL/SQL過(guò)程-使用組合傳遞為參數(shù)傳遞變量和數(shù)據(jù)組合傳遞是指在調(diào)用子程序時(shí)結(jié)合使用位置傳遞和名稱傳遞execadd_emp(4444,‘1985-2-3’,’AGASI’,‘tester’,1,null,indate=>SYSDATE,salary=>1200,allow=>0,deptno=>30)PL/SQL過(guò)程-使用組合傳遞為參數(shù)傳遞變量和數(shù)據(jù)組合傳遞是PL/SQL過(guò)程-過(guò)程開(kāi)發(fā)示例為過(guò)程參數(shù)指定默認(rèn)值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過(guò)程-過(guò)程開(kāi)發(fā)示例為過(guò)程參數(shù)指定默認(rèn)值PL/SQL過(guò)程-使用異常處理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過(guò)程-使用異常處理CREATEORREPLAPL/SQL過(guò)程-維護(hù)過(guò)程刪除過(guò)程DROPPROCEDURE顯示編譯錯(cuò)誤,查詢數(shù)據(jù)字典USER_ERRORS,或者執(zhí)行SHOWERRORS命令。確定過(guò)程狀態(tài),查詢數(shù)據(jù)字典USER_OBJECTS。編譯過(guò)程,ALTERPROCEDURE…COMPILE;查看過(guò)程代碼,通過(guò)查詢數(shù)據(jù)字典USER_SOURCE。PL/SQL過(guò)程-維護(hù)過(guò)程刪除過(guò)程DROPPROCED導(dǎo)航PL/SQL過(guò)程PL/SQL函數(shù)PL/SQL包導(dǎo)航函數(shù)函數(shù)是一種命名存儲(chǔ)塊,可以接收輸入并進(jìn)行定義的邏輯處理以后把結(jié)果返回給調(diào)用者。與過(guò)程相似,只是函數(shù)必須有返回值。函數(shù)函數(shù)是一種命名存儲(chǔ)塊,可以接收輸入并進(jìn)行定義的邏輯處理以函數(shù)-創(chuàng)建基本語(yǔ)法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)建基本語(yǔ)法函數(shù)-例子

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

--定義公用過(guò)程和函數(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包-建立包體包體用于實(shí)現(xiàn)包規(guī)范所定義的公用過(guò)程和函數(shù),包體不僅可用與實(shí)現(xiàn)公用過(guò)程和函數(shù),而且可以定義包的私有組件(變量、常量等)建立包體語(yǔ)法CREATE[ORREPL

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論