想靠Oracle拿高薪,存儲過程的優(yōu)點你搞清楚了?

  • 除了日常的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)默認(rèn)的存儲過程,那么可以直接通過存儲過程的名稱進(jìn)行調(diào)用。另外,存儲過程還可以在編程語言中調(diào)用,如Java、C#等。

存儲過程的優(yōu)點:

  • 增加數(shù)據(jù)獨立性。與視圖的效果相似,利用存儲過程可以把數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)和程序(或用戶)隔離開來,當(dāng)基礎(chǔ)數(shù)據(jù)的結(jié)構(gòu)發(fā)生變化時,可以修改存儲過程,這樣對程序來說基礎(chǔ)數(shù)據(jù)的變化是不可見的,也就不需要修改程序代碼了。

  • 簡化復(fù)雜的操作。存儲過程可以把需要執(zhí)行的多條SQL語句封裝到一個獨立單元中,用戶只需調(diào)用這個單元就能達(dá)到目的。這樣就實現(xiàn)了一人編寫多人調(diào)用。

  • 提高性能。完成一項復(fù)雜的功能可能需要多條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ù)名不能重復(fù)。參數(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ù)傳遞類型,默認(rèn)為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ù),需要注意,當(dāng)一個參數(shù)被指定為OUT類型時,就算在調(diào)用存儲過程之前對該參數(shù)進(jìn)行了賦值,在存儲過程中該參數(shù)的值仍然是NULL.

  • IN OUT 是真正的按引用傳遞參數(shù)。即可作為傳入?yún)?shù)也可以作為傳出參數(shù)。

總結(jié):

作為一個新生程序猿,Damon希望能夠與大家一同進(jìn)步。文章或者描述有所不足的地方,希望大家多多提出來,一同進(jìn)步。

Damon會繼續(xù)發(fā)掘一些有用的咨詢,知識以及新工具,與大家一同分享,謝謝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容