【正文】
?完整的過程結(jié)構(gòu)如下 : create or replace procedure 過程名 as 聲明語(yǔ)句段 。Oracle數(shù)據(jù)庫(kù)存儲(chǔ)過程 ? 過程就是高級(jí)程序設(shè)計(jì)語(yǔ)言中的模塊的概念 ,將一些內(nèi)部聯(lián)系的命令組成一個(gè)個(gè)過程 ,通過參數(shù)在過程之間傳遞數(shù)據(jù)是模塊化設(shè)計(jì)思想的重要內(nèi)容 . 過程 ? 1)存儲(chǔ)過程是預(yù)編譯過的,并且經(jīng)優(yōu)化后存儲(chǔ)于SQL內(nèi)存中,使用時(shí)無需再次編譯,提高了工作效率; ? 2)存儲(chǔ)過程的代碼直接存放于數(shù)據(jù)庫(kù)中,一般由客戶端直接通過存儲(chǔ)過程的名字進(jìn)行調(diào)用,減少了網(wǎng)絡(luò)流量,加快了系統(tǒng)執(zhí)行速度,例如在進(jìn)行百萬(wàn)以上的大批量數(shù)據(jù)查詢時(shí),使用存儲(chǔ)過程分頁(yè)要比其他方式分頁(yè)快得多; ? 3)使用存儲(chǔ)過程可以減少 SQL注入式攻擊,提高了系統(tǒng)的安全性,執(zhí)行存儲(chǔ)過程的用戶要具有一定的權(quán)限才能使用存儲(chǔ)過程,沒有數(shù)據(jù)操作權(quán)限的用戶只能在其控制下間接地存取數(shù)據(jù) 。 存儲(chǔ)過程特點(diǎn) 4)在同時(shí)進(jìn)行主、從表及多表間的數(shù)據(jù)維護(hù)及有效性驗(yàn)證時(shí),使用存儲(chǔ)過程比較方便,而且可以有效利用 SQL中的事務(wù)處理的機(jī)制; 5)使用存儲(chǔ)過程,可以實(shí)現(xiàn)存儲(chǔ)過程設(shè)計(jì)和編碼工作分開進(jìn)行,只要將存儲(chǔ)過程名、參數(shù)、及返回信息告訴編碼人員即可; 6)但使用存儲(chǔ)過程封裝業(yè)務(wù)邏輯將限制應(yīng)用程序的可移植性;另外,如果更改存儲(chǔ)過程的參數(shù)或者其返回的數(shù)據(jù)及類型的話,需要修改應(yīng)用程序的相關(guān)代碼,比較繁瑣。 begin 執(zhí)行語(yǔ)句段 。 end。 ? 調(diào)用時(shí)” ()”是不可少的,無論是有參數(shù)還是無參數(shù)。 ? begin ? select sname into pname from student where sno=1。 ? end。 ? begin ? select sname into p_name from student where sno=1。 ? end。 ? begin ? select sname into pname from student where sno=pno。 ? end。 ? (pname)。 ? 此種存儲(chǔ)過程不能直接用 call來調(diào)用,這種情況的調(diào)用將在下面 oracle函數(shù)調(diào)用中說明 參數(shù)過程實(shí)例 ? 有輸入 \輸出參數(shù)的存儲(chǔ)過程: ? create or replace procedure stu_proc3 ? (pno in %type,pname out %type) as ? begin ? select sname into pname from student where sno=pno。 ? end。 ? begin ? stu_proc。 ? return pname。 ? 調(diào)用 ? declare ? begin ? (39。||get_pname)。 函數(shù)調(diào)用存儲(chǔ)過程實(shí)例 ? 對(duì)有輸入?yún)?shù)過程的調(diào)用: ? create or replace function get_pname1(pno in number) return varchar2 is ? pname varchar2(20)。 ? return pname。 ? 調(diào)用 ? declare ? begin ? (39。||get_pname1(2))。 函數(shù)調(diào)用存儲(chǔ)過程實(shí)例 ? 對(duì)有輸出參數(shù)過程的調(diào)用 : ? create or replace function get_pname2(pname out varchar2) return varchar2 is ? begin ? stu_proc2(pname out %type)。 ? end。 ? begin ? (39。||get_pname2(pname))。 函數(shù)調(diào)用存儲(chǔ)過程實(shí)例 ? 對(duì)有輸入 \輸出參數(shù)過程的調(diào)用 : ? create or replace function get_pname3(pno in number,pname out varchar2) return varchar2 is ? begin ? stu_proc3(pno in %type,pname out %type)。 ? end。 ? begin ? (39。||get_pname3(2,pname))。 函數(shù)調(diào)用存儲(chǔ)過程實(shí)例 ? 前面我們已經(jīng)講述了有關(guān)