- 除了日常的mysql,相信大家都知道Oracle由于其存在的時間之長切省,也是許多大廠的選擇最岗。并且在日常的面試中,熟知Oracle與原本在面試中也是擁有極大的優(yōu)勢。而今天咱們就來說說Oracle中的存儲過程朝捆。
存儲過程是Oracle開發(fā)者在數(shù)據(jù)轉(zhuǎn)換或查詢報表時經(jīng)常使用的方式之一般渡。
- 我們都知道,它就是想編程語言一樣一旦運行成功芙盘,在日常的使用中就可以被用戶隨時調(diào)用驯用,這種方式極大的節(jié)省了用戶的時間,也提高了程序的執(zhí)行效率儒老。存儲過程在數(shù)據(jù)庫開發(fā)中使用比較頻繁蝴乔,它有著普通SQL語句不可替代的作用。
- 所謂存儲過程驮樊,就是一段存儲在數(shù)據(jù)庫中執(zhí)行某種功能的程序薇正。其中包含一條或多條SQL語句片酝,但是它的定義方式和PL/SQL中的塊、包等有所區(qū)別挖腰。存儲過程可以通俗地理解為是存儲在數(shù)據(jù)庫服務(wù)器中的封裝了一段或多段SQL語句的PL/SQL代碼塊雕沿。
- 在數(shù)據(jù)庫中有一些是系統(tǒng)默認的存儲過程,那么可以直接通過存儲過程的名稱進行調(diào)用猴仑。另外审轮,存儲過程還可以在編程語言中調(diào)用,如Java辽俗、C#等断国。
存儲過程的優(yōu)點:
增加數(shù)據(jù)獨立性。與視圖的效果相似榆苞,利用存儲過程可以把數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)和程序(或用戶)隔離開來稳衬,當基礎(chǔ)數(shù)據(jù)的結(jié)構(gòu)發(fā)生變化時,可以修改存儲過程坐漏,這樣對程序來說基礎(chǔ)數(shù)據(jù)的變化是不可見的薄疚,也就不需要修改程序代碼了。
簡化復雜的操作赊琳。存儲過程可以把需要執(zhí)行的多條SQL語句封裝到一個獨立單元中街夭,用戶只需調(diào)用這個單元就能達到目的。這樣就實現(xiàn)了一人編寫多人調(diào)用躏筏。
提高性能板丽。完成一項復雜的功能可能需要多條SQL語句,同時SQL每次執(zhí)行都需要編譯趁尼,而存儲過程可以包含多條SQL語句埃碱,而且創(chuàng)建后只需要編譯一次,以后就可以直接調(diào)用酥泞。
存儲過程的語法:
- 創(chuàng)建語句:create or replace procedure 存儲過程名砚殿。如果沒有or replace語句,則僅僅是新建一個存儲過程芝囤。如果系統(tǒng)存在該存儲過程似炎,則會報錯。Create or replace procedure 如果系統(tǒng)中沒有此存儲過程就新建一個悯姊,如果系統(tǒng)中有此存儲過程則把原來刪除掉羡藐,重新創(chuàng)建一個存儲過程。
- 存儲過程名定義:包括存儲過程名和參數(shù)列表悯许。參數(shù)名和參數(shù)類型仆嗦。參數(shù)名不能重復。參數(shù)的數(shù)據(jù)類型只需要指明類型名即可岸晦,不需要指定寬度欧啤。 參數(shù)的寬度由外部調(diào)用者決定睛藻。 存儲過程可以有參數(shù),也可以沒有參數(shù)邢隧。
- 變量聲明塊:緊跟著的as (is )關(guān)鍵字店印,可以理解為pl/sql的declare關(guān)鍵字,用于聲明變量倒慧。 變量聲明塊用于聲明該存儲過程需要用到的變量按摘,它的作用域為該存儲過程。另外這里聲明的變量必須指定寬度纫谅。
- 過程語句塊:從begin 關(guān)鍵字開始為過程的語句塊炫贤。存儲過程的具體邏輯在這里來實現(xiàn)。
- 異常處理塊:關(guān)鍵字為exception 付秕,為處理語句產(chǎn)生的異常兰珍。該部分為可選 。
- 結(jié)束塊:由end關(guān)鍵字結(jié)束询吴。
- 存儲過程的參數(shù)傳遞方式 :
- 存儲過程的參數(shù)傳遞有三種方式:IN,OUT,IN OUT .
- IN 按值傳遞掠河,并且它不允許在存儲過程中被重新賦值。如果存儲過程的參數(shù)沒有指定存參數(shù)傳遞類型猛计,默認為IN
create or replace procedure proc1(
p_para1 varchar2,
p_para2 out varchar2,
p_para3 in out varchar2
)as
v_name varchar2(20);
begin
p_para1 :='aaa';
p_para2 :='bbb';
v_name := '張三豐';
p_para3 := v_name;
dbms_output.put_line('p_para3:'||p_para3);
null;
end;
OUT 參數(shù):作為輸出參數(shù)唠摹,需要注意,當一個參數(shù)被指定為OUT類型時奉瘤,就算在調(diào)用存儲過程之前對該參數(shù)進行了賦值勾拉,在存儲過程中該參數(shù)的值仍然是NULL.
IN OUT 是真正的按引用傳遞參數(shù)。即可作為傳入?yún)?shù)也可以作為傳出參數(shù)盗温。