版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第14章存儲過程前面章節(jié)中講解了PL/SQL有關(guān)的內(nèi)容。事實(shí)上,PL/SQL主要包括匿名塊、存儲過程和存儲函數(shù)三種形式的PL/SQL塊。存儲過程是一段存儲在數(shù)據(jù)庫中執(zhí)行某功能的程序。使用存儲過程可以方便用戶使用數(shù)據(jù)庫中的應(yīng)用程序。本章重點(diǎn)介紹如何創(chuàng)建存儲過程以及如何在PL/SQL塊中使用過程訪問數(shù)據(jù)庫中的數(shù)據(jù)。第14章存儲過程前面章節(jié)中講解了PL/SQL有關(guān)的內(nèi)容。114.1存儲過程簡介在PL/SQL塊中常把一些功能相對獨(dú)立、需要經(jīng)常執(zhí)行的代碼定義為一個子程序,在需要時可以根據(jù)子程序的名字進(jìn)行調(diào)用,從而簡化操作。這樣不僅便于程序設(shè)計,而且有利于程序的調(diào)試。與其他PL/SQL塊一樣,在子程序中也可以定義變量、類型、游標(biāo)等,同樣可以進(jìn)行異常處理操作。需要注意的是有時必須向子程序提供參數(shù)(向子程序傳遞參數(shù))。PL/SQL的子程序有兩種形式,即過程和函數(shù)。過程與函數(shù)的區(qū)別在于函數(shù)有返回值,可以向調(diào)用者返回執(zhí)行結(jié)果,而過程沒有返回值。14.1存儲過程簡介在PL/SQL塊中常把一些功能相對214.1.1認(rèn)識存儲過程在Oracle數(shù)據(jù)庫中,可以將一些固定的操作集中起來由Oracle數(shù)據(jù)庫服務(wù)器來完成,以實(shí)現(xiàn)某個任務(wù),這就是存儲過程。存儲過程是Oracle開發(fā)者在數(shù)據(jù)轉(zhuǎn)換或查詢報表時經(jīng)常使用的方式之一。一旦在數(shù)據(jù)庫管理系統(tǒng)中創(chuàng)建了存儲過程對象,用戶就可以使用應(yīng)用程序,通過簡單命令執(zhí)行存儲過程。存儲過程在第一次執(zhí)行時,進(jìn)行語法檢查和編譯,執(zhí)行后,它的執(zhí)行計劃就駐留在高速緩存中,用于后續(xù)調(diào)用。存儲過程可以接收和輸出參數(shù),返回執(zhí)行存儲過程的狀態(tài)值,還可以嵌套調(diào)用。詳細(xì)內(nèi)容在下面講解。14.1.1認(rèn)識存儲過程在Oracle數(shù)據(jù)庫中,可以將一314.1.2存儲過程的作用存儲過程的編寫相對復(fù)雜,但是很多人都在使用它。這是因?yàn)樗兄幌盗械膬?yōu)點(diǎn)。簡化復(fù)雜操作。增加數(shù)據(jù)獨(dú)立性。提高安全性。實(shí)現(xiàn)表字段完整性。14.1.2存儲過程的作用存儲過程的編寫相對復(fù)雜,但是很414.2
創(chuàng)建存儲過程和執(zhí)行存儲過程更傾向于數(shù)據(jù)庫操作。存儲過程的創(chuàng)建有固定的模式。我們可以使用語句的方法創(chuàng)建,也可以使用PL/SQL工具創(chuàng)建,本節(jié)主要學(xué)習(xí)使用語句的方法創(chuàng)建執(zhí)行存儲過程。14.2創(chuàng)建存儲過程和執(zhí)行存儲過程更傾向于數(shù)據(jù)庫操作。514.2.1創(chuàng)建存儲過程在PL/SQL語句中,可以使用createorreplaceprocedure命令創(chuàng)建用戶自定義存儲過程。存儲過程包括無參數(shù)的存儲過程以及各類有參數(shù)的存儲過程。創(chuàng)建無參數(shù)的存儲過程語法結(jié)構(gòu)如圖所示。14.2.1創(chuàng)建存儲過程在PL/SQL語句中,可以使用c614.2.1創(chuàng)建存儲過程1.創(chuàng)建無參數(shù)存儲過程無參數(shù)的存儲過程就是在創(chuàng)建的存儲過程中不帶任何參數(shù),通過這種存儲過程用做數(shù)據(jù)轉(zhuǎn)換的幾率比較大?!臼纠?4-1】創(chuàng)建一個簡單的存儲過程,輸出信息“人生追求情趣,年輕追求個性?!薄!臼纠?4-2】在數(shù)據(jù)表customersnew中,存儲了顧客信息。【示例14-3】創(chuàng)建一個無參數(shù)存儲過程,用于修改表customersnew中列credit_limit的數(shù)據(jù),為status是“gold”的credit_limit增加10000。14.2.1創(chuàng)建存儲過程1.創(chuàng)建無參數(shù)存儲過程714.2.1創(chuàng)建存儲過程2.查看存儲過程信息存儲過程一旦創(chuàng)建,就存儲在數(shù)據(jù)庫服務(wù)器上,Oracle允許開發(fā)人員查看已經(jīng)存在的存儲過程腳本,這可以通過數(shù)據(jù)字典(視圖)user_objects和user_source進(jìn)行查看。當(dāng)從視圖中查詢過程時,需要把名稱大寫。14.2.1創(chuàng)建存儲過程2.查看存儲過程信息814.2.1創(chuàng)建存儲過程(1)通過user_objects查看存儲過程。【示例14-4】前面創(chuàng)建了創(chuàng)建一個無參數(shù)存儲過程pro_print,現(xiàn)在通過數(shù)據(jù)字典user_objects查看存儲過程信息?!臼纠?4-5】利用user_source查看存儲過程pro_print的詳細(xì)信息。14.2.1創(chuàng)建存儲過程(1)通過user_object914.2.1創(chuàng)建存儲過程3.顯示存儲過程的錯誤編寫存儲過程時由于各種原因都有可能出現(xiàn)錯誤而導(dǎo)致過程編譯失敗,這種情況下,可以利用視圖user_errors查看具體的錯誤提示?!臼纠?4-6】創(chuàng)建一個簡單的帶有錯誤的存儲過程,輸出信息“人生追求情趣,年輕追求個性?!?。【示例14-7】利用user_errors查看存儲過程的具體的錯誤提示。14.2.1創(chuàng)建存儲過程3.顯示存儲過程的錯誤1014.2.1創(chuàng)建存儲過程4.執(zhí)行存儲過程存儲過程一旦創(chuàng)建,便可以被其他用戶調(diào)用。執(zhí)行存儲過程非常簡單。當(dāng)處于PL/SQL代碼塊中時,可以直接利用存儲過程名稱來調(diào)用和執(zhí)行存儲過程如下所示?!臼纠?4-8】調(diào)用和執(zhí)行存儲過程pro_print?!臼纠?4-9】使用execute命令調(diào)用存儲過程pro_credit。14.2.1創(chuàng)建存儲過程4.執(zhí)行存儲過程1114.2.2有參數(shù)的存儲過程無參數(shù)的存儲過程不會接受參數(shù)的傳入和傳出,是針對表或者視圖的查詢或者刪除操作,適合進(jìn)行數(shù)據(jù)的轉(zhuǎn)換操作。但是存儲過程可以帶參數(shù),實(shí)現(xiàn)特定的功能。參數(shù)的使用將增加存儲過程的靈活性,給數(shù)據(jù)庫編程帶來極大的方便。14.2.2有參數(shù)的存儲過程無參數(shù)的存儲過程不會接受參數(shù)1214.2.2有參數(shù)的存儲過程存儲過程的參數(shù)有三種:in(輸入類型)參數(shù)、out(輸出類型)參數(shù)和inout(輸入輸出類型)參數(shù)。在過程中可以定義參數(shù),在調(diào)用該過程時,可以向過程傳遞實(shí)際參數(shù)。如果沒有參數(shù),則過程名后面的圓括號及參數(shù)列表可以省略。參數(shù)的定義形式如圖所示。14.2.2有參數(shù)的存儲過程存儲過程的參數(shù)有三種:in(1314.2.2有參數(shù)的存儲過程三種參數(shù)傳遞模式的比較如表所示。參數(shù)默認(rèn)值的作用是在調(diào)用過程時,如果沒有提供實(shí)際參數(shù),則將此默認(rèn)值作為實(shí)際參數(shù)傳遞給過程。數(shù)據(jù)類型用來指定參數(shù)的類型,在參數(shù)定義中不能指定對參數(shù)的約束條件,即不能指定參數(shù)的長度和是否為空等屬性。
inoutinout是否默認(rèn)默認(rèn)必須明確指定必須明確指定參數(shù)傳遞方向從調(diào)用者到過程從過程到調(diào)用者兩個方向形式參數(shù)的作用一個常量沒有初始化的變量經(jīng)過初始化的變量實(shí)際參數(shù)的形式常量、表達(dá)式、變量必須是一個變量必須是一個變量14.2.2有參數(shù)的存儲過程三種參數(shù)傳遞模式的比較如表所1414.2.3
in參數(shù)in參數(shù),是輸入類型的參數(shù),表示這個參數(shù)輸入給過程,供過程使用。本小節(jié)將講述in參數(shù)的使用。前面我們講解到使用存儲過程可以檢查數(shù)據(jù)的完整性。下面就通過示例加深理解。14.2.3in參數(shù)in參數(shù),是輸入類型的參數(shù),表示這個1514.2.3
in參數(shù)1.創(chuàng)建包含in參數(shù)的存儲過程【示例14-10】對于表customersnew的插入操作,我們希望對提供的信息,account_mgr_id做判斷,如果符合要求,則可以執(zhí)行插入操作,否則,禁止添加顧客信息。14.2.3in參數(shù)1.創(chuàng)建包含in參數(shù)的存儲過程1614.2.3
in參數(shù)2.在存儲過程中為in參數(shù)賦值如果在存儲過程內(nèi)部,嘗試修改in參數(shù),那么將引起Oracle編譯錯誤。【示例14-11】對于已經(jīng)創(chuàng)建的存儲過程insert_cus,在存儲過程內(nèi)部,嘗試將輸入?yún)?shù)mgr_id賦值為145。14.2.3in參數(shù)2.在存儲過程中為in參數(shù)賦值1714.2.3
in參數(shù)3.重建帶輸入?yún)?shù)的存儲過程【示例14-12】前面我們創(chuàng)建了一個無參數(shù)存儲過程pro_credit,用于修改表customersnew中列credit_limit的數(shù)據(jù),為status是“gold”的credit_limit增加10000?,F(xiàn)在將該存儲過程修改為帶輸入?yún)?shù)的存儲過程,可以指定顧客編號對credit_limit進(jìn)行相應(yīng)處理。4.執(zhí)行存儲過程【示例14-13】執(zhí)行存儲過程pro_credit,將所有顧客的credit_limit增加10000?!臼纠?4-14】在上述例子中,將所有顧客的credit_limit增加10000,現(xiàn)在將顧客編號為101的顧客增加10000。14.2.3in參數(shù)3.重建帶輸入?yún)?shù)的存儲過程1814.2.4
out參數(shù)out參數(shù)是輸出類型的參數(shù),表示這個參數(shù)在存儲過程中被復(fù)制,可以傳給過程提以外的部分。與in參數(shù)相反,out參數(shù)是只出不進(jìn)的參數(shù)。14.2.4out參數(shù)out參數(shù)是輸出類型的參數(shù),表示這1914.2.4
out參數(shù)1.創(chuàng)建一個帶out參數(shù)的存儲過程,并執(zhí)行【示例14-15】對于前面示例中的存儲過程insert_cus,在調(diào)用插入數(shù)據(jù)之后,我們通過查詢表中數(shù)據(jù)才能驗(yàn)證是否執(zhí)行成功。如果使用out參數(shù),更方便?!臼纠?4-16】執(zhí)行存儲過程out_cus。14.2.4out參數(shù)1.創(chuàng)建一個帶out參數(shù)的存儲過程2014.2.4
out參數(shù)2.創(chuàng)建包含in參數(shù)、out參數(shù)的存儲過程【示例14-17】創(chuàng)建存儲過程total_order,計算orders數(shù)據(jù)表中所有的訂單總和,參數(shù)設(shè)置時,我們設(shè)置一個in參數(shù),一個out參數(shù)?!臼纠?4-18】執(zhí)行存儲過程total_order。14.2.4out參數(shù)2.創(chuàng)建包含in參數(shù)、out參數(shù)的2114.2.5
inout參數(shù)inout參數(shù)綜合了上述兩種參數(shù)類型,既向過程體傳值,在過程中,也被賦值而傳到過程體外。inout參數(shù)既可以作為輸入也可以作為輸出?!臼纠?4-19】結(jié)合使用inout參數(shù)的,實(shí)現(xiàn)交換兩個變量的值。【示例14-20】執(zhí)行存儲過程exch,實(shí)現(xiàn)交換兩個變量的值。14.2.5inout參數(shù)inout參數(shù)綜合了上述兩2214.3
SQL
Developer工具創(chuàng)建存儲過程使用SQLDeveloper創(chuàng)建存儲過程是比較簡單的。該工具提供一個相對便利的操作環(huán)境,尤其對于存儲過程的調(diào)試和錯誤的查找都比語句創(chuàng)建存儲過程要方便。本節(jié)介紹在SQLDeveloper中創(chuàng)建和調(diào)試存儲過程。14.3SQLDeveloper工具創(chuàng)建存儲過程使用S2314.3.1創(chuàng)建存儲過程SQLDeveloper提供了創(chuàng)建存儲過程的模版,該模版允許輸入存儲過程名和參數(shù),然后自動創(chuàng)建腳本。該腳本是一個簡單框架,細(xì)節(jié)則需要用戶自己開發(fā)?!臼纠?4-21】利用SQLDeveloper工具創(chuàng)建存儲過程exch1,實(shí)現(xiàn)交換兩個變量的值。14.3.1創(chuàng)建存儲過程SQLDeveloper提供了2414.3.2調(diào)試存儲過程存儲過程創(chuàng)建之后,調(diào)試存儲過程是很有必要的,它和其他語言的調(diào)試功能類似,可以設(shè)置斷點(diǎn),可以分步執(zhí)行。本小節(jié)將簡要介紹如何在PL/SQLDeveloper中調(diào)試修改存儲過程?!臼纠?4-22】在SQLDeveloper中調(diào)試存儲過程。14.3.2調(diào)試存儲過程存儲過程創(chuàng)建之后,調(diào)試存儲過程是2514.4管理存儲過程存儲過程創(chuàng)建之后,可以對其進(jìn)行調(diào)用。但是在后期使用中,如果有不合適的地方,需要對存儲過程進(jìn)行修改和刪除。本小節(jié)主要講解圖和修改存儲過程、重新編譯存儲過程以及刪除存儲過程。14.4管理存儲過程存儲過程創(chuàng)建之后,可以對其進(jìn)行調(diào)用。2614.4.1修改存儲過程當(dāng)存儲過程中出現(xiàn)錯誤時,可以修改存儲過程。修改存儲過程可以人為地把原來的存儲過程刪除,然后建立新的存儲過程,也可以使用Oracle提供的語法直接完成修改。14.4.1修改存儲過程當(dāng)存儲過程中出現(xiàn)錯誤時,可以修改2714.4.1修改存儲過程修改存儲過程使用replace關(guān)鍵字,即覆蓋。我們一般在創(chuàng)建存儲過程時,就將該關(guān)鍵字寫上?!臼纠?4-23】創(chuàng)建存儲過程,完成一個數(shù)的加倍?!臼纠?4-24】修改存儲過程double1,將存儲過程的參數(shù)設(shè)置為inout參數(shù)類型,并修改賦值方式。14.4.1修改存儲過程修改存儲過程使用replace關(guān)2814.4.2重新編譯存儲過程存儲過程在某些情況下是需要重新編譯的,重新編譯可以獲得存儲過程的最新狀態(tài)。重新編譯存儲過程的語法結(jié)構(gòu)如圖所示?!臼纠?4-25】重新編譯存儲過程double1,完成一個數(shù)的加倍?!臼纠?4-26】執(zhí)行存儲過程double1。14.4.2重新編譯存儲過程存儲過程在某些情況下是需要重2914.4.3刪除存儲過程不再需要存儲過程時,可以將其刪除。利用語句刪除存儲過程的語法結(jié)構(gòu)如圖所示。【示例14-27】刪除存儲過程double1。14.4.3刪除存儲過程不再需要存儲過程時,可以將其刪除3014.4.3刪除存儲過程除了使用語句方法外,還可以使用工具刪除存儲過程。這種方式是在PL/SQLDeveloper中選中要刪除的存儲過程,右擊該過程,在彈出的快捷菜單中選擇“刪除”選項(xiàng),此時會出現(xiàn)確認(rèn)刪除窗口,單擊“是”按鈕即可。14.4.3刪除存儲過程除了使用語句方法外,還可以使用工3114.5小結(jié)存儲過程的使用十分普遍,是Oracle的重點(diǎn)知識。本章不僅介紹了存儲過程的概念和作用,而且詳細(xì)講解了如何讓創(chuàng)建和操作各種類型的存儲過程。本章的重點(diǎn)是如何根據(jù)需求創(chuàng)建合適的操作過程,難點(diǎn)是對存儲過程參數(shù)的設(shè)置,以及如何執(zhí)行存儲過程。下一章將學(xué)習(xí)函數(shù)和程序包。14.5小結(jié)存儲過程的使用十分普遍,是Oracle的重點(diǎn)32第14章存儲過程前面章節(jié)中講解了PL/SQL有關(guān)的內(nèi)容。事實(shí)上,PL/SQL主要包括匿名塊、存儲過程和存儲函數(shù)三種形式的PL/SQL塊。存儲過程是一段存儲在數(shù)據(jù)庫中執(zhí)行某功能的程序。使用存儲過程可以方便用戶使用數(shù)據(jù)庫中的應(yīng)用程序。本章重點(diǎn)介紹如何創(chuàng)建存儲過程以及如何在PL/SQL塊中使用過程訪問數(shù)據(jù)庫中的數(shù)據(jù)。第14章存儲過程前面章節(jié)中講解了PL/SQL有關(guān)的內(nèi)容。3314.1存儲過程簡介在PL/SQL塊中常把一些功能相對獨(dú)立、需要經(jīng)常執(zhí)行的代碼定義為一個子程序,在需要時可以根據(jù)子程序的名字進(jìn)行調(diào)用,從而簡化操作。這樣不僅便于程序設(shè)計,而且有利于程序的調(diào)試。與其他PL/SQL塊一樣,在子程序中也可以定義變量、類型、游標(biāo)等,同樣可以進(jìn)行異常處理操作。需要注意的是有時必須向子程序提供參數(shù)(向子程序傳遞參數(shù))。PL/SQL的子程序有兩種形式,即過程和函數(shù)。過程與函數(shù)的區(qū)別在于函數(shù)有返回值,可以向調(diào)用者返回執(zhí)行結(jié)果,而過程沒有返回值。14.1存儲過程簡介在PL/SQL塊中常把一些功能相對3414.1.1認(rèn)識存儲過程在Oracle數(shù)據(jù)庫中,可以將一些固定的操作集中起來由Oracle數(shù)據(jù)庫服務(wù)器來完成,以實(shí)現(xiàn)某個任務(wù),這就是存儲過程。存儲過程是Oracle開發(fā)者在數(shù)據(jù)轉(zhuǎn)換或查詢報表時經(jīng)常使用的方式之一。一旦在數(shù)據(jù)庫管理系統(tǒng)中創(chuàng)建了存儲過程對象,用戶就可以使用應(yīng)用程序,通過簡單命令執(zhí)行存儲過程。存儲過程在第一次執(zhí)行時,進(jìn)行語法檢查和編譯,執(zhí)行后,它的執(zhí)行計劃就駐留在高速緩存中,用于后續(xù)調(diào)用。存儲過程可以接收和輸出參數(shù),返回執(zhí)行存儲過程的狀態(tài)值,還可以嵌套調(diào)用。詳細(xì)內(nèi)容在下面講解。14.1.1認(rèn)識存儲過程在Oracle數(shù)據(jù)庫中,可以將一3514.1.2存儲過程的作用存儲過程的編寫相對復(fù)雜,但是很多人都在使用它。這是因?yàn)樗兄幌盗械膬?yōu)點(diǎn)。簡化復(fù)雜操作。增加數(shù)據(jù)獨(dú)立性。提高安全性。實(shí)現(xiàn)表字段完整性。14.1.2存儲過程的作用存儲過程的編寫相對復(fù)雜,但是很3614.2
創(chuàng)建存儲過程和執(zhí)行存儲過程更傾向于數(shù)據(jù)庫操作。存儲過程的創(chuàng)建有固定的模式。我們可以使用語句的方法創(chuàng)建,也可以使用PL/SQL工具創(chuàng)建,本節(jié)主要學(xué)習(xí)使用語句的方法創(chuàng)建執(zhí)行存儲過程。14.2創(chuàng)建存儲過程和執(zhí)行存儲過程更傾向于數(shù)據(jù)庫操作。3714.2.1創(chuàng)建存儲過程在PL/SQL語句中,可以使用createorreplaceprocedure命令創(chuàng)建用戶自定義存儲過程。存儲過程包括無參數(shù)的存儲過程以及各類有參數(shù)的存儲過程。創(chuàng)建無參數(shù)的存儲過程語法結(jié)構(gòu)如圖所示。14.2.1創(chuàng)建存儲過程在PL/SQL語句中,可以使用c3814.2.1創(chuàng)建存儲過程1.創(chuàng)建無參數(shù)存儲過程無參數(shù)的存儲過程就是在創(chuàng)建的存儲過程中不帶任何參數(shù),通過這種存儲過程用做數(shù)據(jù)轉(zhuǎn)換的幾率比較大?!臼纠?4-1】創(chuàng)建一個簡單的存儲過程,輸出信息“人生追求情趣,年輕追求個性?!??!臼纠?4-2】在數(shù)據(jù)表customersnew中,存儲了顧客信息。【示例14-3】創(chuàng)建一個無參數(shù)存儲過程,用于修改表customersnew中列credit_limit的數(shù)據(jù),為status是“gold”的credit_limit增加10000。14.2.1創(chuàng)建存儲過程1.創(chuàng)建無參數(shù)存儲過程3914.2.1創(chuàng)建存儲過程2.查看存儲過程信息存儲過程一旦創(chuàng)建,就存儲在數(shù)據(jù)庫服務(wù)器上,Oracle允許開發(fā)人員查看已經(jīng)存在的存儲過程腳本,這可以通過數(shù)據(jù)字典(視圖)user_objects和user_source進(jìn)行查看。當(dāng)從視圖中查詢過程時,需要把名稱大寫。14.2.1創(chuàng)建存儲過程2.查看存儲過程信息4014.2.1創(chuàng)建存儲過程(1)通過user_objects查看存儲過程?!臼纠?4-4】前面創(chuàng)建了創(chuàng)建一個無參數(shù)存儲過程pro_print,現(xiàn)在通過數(shù)據(jù)字典user_objects查看存儲過程信息。【示例14-5】利用user_source查看存儲過程pro_print的詳細(xì)信息。14.2.1創(chuàng)建存儲過程(1)通過user_object4114.2.1創(chuàng)建存儲過程3.顯示存儲過程的錯誤編寫存儲過程時由于各種原因都有可能出現(xiàn)錯誤而導(dǎo)致過程編譯失敗,這種情況下,可以利用視圖user_errors查看具體的錯誤提示?!臼纠?4-6】創(chuàng)建一個簡單的帶有錯誤的存儲過程,輸出信息“人生追求情趣,年輕追求個性。”?!臼纠?4-7】利用user_errors查看存儲過程的具體的錯誤提示。14.2.1創(chuàng)建存儲過程3.顯示存儲過程的錯誤4214.2.1創(chuàng)建存儲過程4.執(zhí)行存儲過程存儲過程一旦創(chuàng)建,便可以被其他用戶調(diào)用。執(zhí)行存儲過程非常簡單。當(dāng)處于PL/SQL代碼塊中時,可以直接利用存儲過程名稱來調(diào)用和執(zhí)行存儲過程如下所示?!臼纠?4-8】調(diào)用和執(zhí)行存儲過程pro_print?!臼纠?4-9】使用execute命令調(diào)用存儲過程pro_credit。14.2.1創(chuàng)建存儲過程4.執(zhí)行存儲過程4314.2.2有參數(shù)的存儲過程無參數(shù)的存儲過程不會接受參數(shù)的傳入和傳出,是針對表或者視圖的查詢或者刪除操作,適合進(jìn)行數(shù)據(jù)的轉(zhuǎn)換操作。但是存儲過程可以帶參數(shù),實(shí)現(xiàn)特定的功能。參數(shù)的使用將增加存儲過程的靈活性,給數(shù)據(jù)庫編程帶來極大的方便。14.2.2有參數(shù)的存儲過程無參數(shù)的存儲過程不會接受參數(shù)4414.2.2有參數(shù)的存儲過程存儲過程的參數(shù)有三種:in(輸入類型)參數(shù)、out(輸出類型)參數(shù)和inout(輸入輸出類型)參數(shù)。在過程中可以定義參數(shù),在調(diào)用該過程時,可以向過程傳遞實(shí)際參數(shù)。如果沒有參數(shù),則過程名后面的圓括號及參數(shù)列表可以省略。參數(shù)的定義形式如圖所示。14.2.2有參數(shù)的存儲過程存儲過程的參數(shù)有三種:in(4514.2.2有參數(shù)的存儲過程三種參數(shù)傳遞模式的比較如表所示。參數(shù)默認(rèn)值的作用是在調(diào)用過程時,如果沒有提供實(shí)際參數(shù),則將此默認(rèn)值作為實(shí)際參數(shù)傳遞給過程。數(shù)據(jù)類型用來指定參數(shù)的類型,在參數(shù)定義中不能指定對參數(shù)的約束條件,即不能指定參數(shù)的長度和是否為空等屬性。
inoutinout是否默認(rèn)默認(rèn)必須明確指定必須明確指定參數(shù)傳遞方向從調(diào)用者到過程從過程到調(diào)用者兩個方向形式參數(shù)的作用一個常量沒有初始化的變量經(jīng)過初始化的變量實(shí)際參數(shù)的形式常量、表達(dá)式、變量必須是一個變量必須是一個變量14.2.2有參數(shù)的存儲過程三種參數(shù)傳遞模式的比較如表所4614.2.3
in參數(shù)in參數(shù),是輸入類型的參數(shù),表示這個參數(shù)輸入給過程,供過程使用。本小節(jié)將講述in參數(shù)的使用。前面我們講解到使用存儲過程可以檢查數(shù)據(jù)的完整性。下面就通過示例加深理解。14.2.3in參數(shù)in參數(shù),是輸入類型的參數(shù),表示這個4714.2.3
in參數(shù)1.創(chuàng)建包含in參數(shù)的存儲過程【示例14-10】對于表customersnew的插入操作,我們希望對提供的信息,account_mgr_id做判斷,如果符合要求,則可以執(zhí)行插入操作,否則,禁止添加顧客信息。14.2.3in參數(shù)1.創(chuàng)建包含in參數(shù)的存儲過程4814.2.3
in參數(shù)2.在存儲過程中為in參數(shù)賦值如果在存儲過程內(nèi)部,嘗試修改in參數(shù),那么將引起Oracle編譯錯誤?!臼纠?4-11】對于已經(jīng)創(chuàng)建的存儲過程insert_cus,在存儲過程內(nèi)部,嘗試將輸入?yún)?shù)mgr_id賦值為145。14.2.3in參數(shù)2.在存儲過程中為in參數(shù)賦值4914.2.3
in參數(shù)3.重建帶輸入?yún)?shù)的存儲過程【示例14-12】前面我們創(chuàng)建了一個無參數(shù)存儲過程pro_credit,用于修改表customersnew中列credit_limit的數(shù)據(jù),為status是“gold”的credit_limit增加10000?,F(xiàn)在將該存儲過程修改為帶輸入?yún)?shù)的存儲過程,可以指定顧客編號對credit_limit進(jìn)行相應(yīng)處理。4.執(zhí)行存儲過程【示例14-13】執(zhí)行存儲過程pro_credit,將所有顧客的credit_limit增加10000。【示例14-14】在上述例子中,將所有顧客的credit_limit增加10000,現(xiàn)在將顧客編號為101的顧客增加10000。14.2.3in參數(shù)3.重建帶輸入?yún)?shù)的存儲過程5014.2.4
out參數(shù)out參數(shù)是輸出類型的參數(shù),表示這個參數(shù)在存儲過程中被復(fù)制,可以傳給過程提以外的部分。與in參數(shù)相反,out參數(shù)是只出不進(jìn)的參數(shù)。14.2.4out參數(shù)out參數(shù)是輸出類型的參數(shù),表示這5114.2.4
out參數(shù)1.創(chuàng)建一個帶out參數(shù)的存儲過程,并執(zhí)行【示例14-15】對于前面示例中的存儲過程insert_cus,在調(diào)用插入數(shù)據(jù)之后,我們通過查詢表中數(shù)據(jù)才能驗(yàn)證是否執(zhí)行成功。如果使用out參數(shù),更方便?!臼纠?4-16】執(zhí)行存儲過程out_cus。14.2.4out參數(shù)1.創(chuàng)建一個帶out參數(shù)的存儲過程5214.2.4
out參數(shù)2.創(chuàng)建包含in參數(shù)、out參數(shù)的存儲過程【示例14-17】創(chuàng)建存儲過程total_order,計算orders數(shù)據(jù)表中所有的訂單總和,參數(shù)設(shè)置時,我們設(shè)置一個in參數(shù),一個out參數(shù)?!臼纠?4-18】執(zhí)行存儲過程total_order。14.2.4out參數(shù)2.創(chuàng)建包含in參數(shù)、out參數(shù)的5314.2.5
inout參數(shù)inout參數(shù)綜合了上述兩種參數(shù)類型,既向過程體傳值,在過程中,也被賦值而傳到過程體外。inout參數(shù)既可以作為輸入也可以作為輸出。【示例14-19】結(jié)合使用inout參數(shù)的,實(shí)現(xiàn)交換兩個變量的值。【示例14-20】執(zhí)行存儲過程exch,實(shí)現(xiàn)交換兩個變量的值。14.2.5inout參數(shù)inout參數(shù)綜合了上述兩5414.3
SQL
Developer工具創(chuàng)建存儲過程使用SQLDeveloper創(chuàng)建存儲過程是比較簡單的。該工具提供一個相對便利的操作環(huán)境,尤其對于存儲過程的調(diào)試和錯誤的查找都比語句創(chuàng)建存儲過程要方便。本節(jié)介紹在SQLDeveloper中創(chuàng)建和調(diào)試存儲過程。14.3SQLDeveloper工具創(chuàng)建存儲過程使用S5514.3.1創(chuàng)建存儲過程SQLDeveloper提供了創(chuàng)建存儲過程的模版,該模版允許輸入存儲過程名和參數(shù),然后自動創(chuàng)建腳本。該腳本是一個簡單框架,細(xì)節(jié)則需要用戶自己開發(fā)?!臼纠?4-21】利用SQLDeveloper工具創(chuàng)建存儲過程exch1,實(shí)現(xiàn)交換兩個變量的值。14.3.1創(chuàng)建存儲過程SQLDeveloper提供了5614.3.2調(diào)試存儲過程存儲過程創(chuàng)建之后,調(diào)試存儲過程是很有必要的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東司法警官職業(yè)學(xué)院《新能源材料》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東省外語藝術(shù)職業(yè)學(xué)院《商務(wù)溝通與談判技巧》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東輕工職業(yè)技術(shù)學(xué)院《手繪插圖技法》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東農(nóng)工商職業(yè)技術(shù)學(xué)院《健康評估1》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東女子職業(yè)技術(shù)學(xué)院《作文教學(xué)設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名健康職業(yè)學(xué)院《物理思維方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 【原創(chuàng)】2013-2020學(xué)年高一生物(蘇教版)下學(xué)期期末復(fù)習(xí)試題(一)
- 【創(chuàng)新設(shè)計】2022年高三生物(人教版)一輪復(fù)習(xí)-基礎(chǔ)課時案45-細(xì)胞工程-考點(diǎn)探究
- 【經(jīng)濟(jì)貿(mào)易】大學(xué)《微觀經(jīng)濟(jì)學(xué)》課件
- 《創(chuàng)業(yè)企劃書》課件
- 2024年中國消防救援學(xué)院第二批面向應(yīng)屆畢業(yè)生招聘28人歷年【重點(diǎn)基礎(chǔ)提升】模擬試題(共500題)附帶答案詳解
- 食品加工代工配方保密協(xié)議
- (完整版)儀表選型
- T-CCAA 39-2022碳管理體系 要求
- 《YST 550-20xx 金屬熱噴涂層剪切強(qiáng)度的測定》-編制說明送審
- 2024-2030年中國氣槍行業(yè)市場深度分析及發(fā)展前景預(yù)測報告
- 數(shù)字化技術(shù)在促進(jìn)幼兒語言發(fā)展中的應(yīng)用
- 江西省上饒市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量測試物理試題(解析版)
- 提高感染性休克集束化治療達(dá)標(biāo)率
- 2024年財務(wù)風(fēng)險評估和控制培訓(xùn)資料
- 2024建筑消防設(shè)施檢測報告書模板
評論
0/150
提交評論