Oracle中存儲過程的作用和用法


  存儲過程是Oracle開發者在數據轉換或查詢報表時經常使用的方式之一。它就是想編程語言一樣一旦運行成功,就可以被用戶隨時調用,這種方式極大的節省了用戶的時間,也提高了程序的執行效率。存儲過程在數據庫開發中使用比較頻繁,它有着普通SQL語句不可替代的作用。所謂存儲過程,就是一段存儲在數據庫中執行某種功能的程序。其中包含一條或多條SQL語句,但是它的定義方式和PL/SQL中的塊、包等有所區別。存儲過程可以通俗地理解為是存儲在數據庫服務器中的封裝了一段或多段SQL語句的PL/SQL代碼塊。在數據庫中有一些是系統默認的存儲過程,那么可以直接通過存儲過程的名稱進行調用。另外,存儲過程還可以在編程語言中調用,如Java、C#等。

存儲過程的作用(優點):

  1. 簡化復雜的操作。存儲過程可以把需要執行的多條SQL語句封裝到一個獨立單元中,用戶只需調用這個單元就能達到目的。這樣就實現了一人編寫多人調用。
  2. 增加數據獨立性。與視圖的效果相似,利用存儲過程可以把數據庫基礎數據和程序(或用戶)隔離開來,當基礎數據的結構發生變化時,可以修改存儲過程,這樣對程序來說基礎數據的變化是不可見的,也就不需要修改程序代碼了。
  3. 提高安全性。使用存儲過程有效降低了錯誤出現的幾率。如果不使用存儲過程要實現某項操作可能需要執行多條單獨的SQL語句,而過多的執行步驟很可能造成更高的出現錯誤幾率。
  4. 提高性能。完成一項復雜的功能可能需要多條SQL語句,同時SQL每次執行都需要編譯,而存儲過程可以包含多條SQL語句,而且創建后只需要編譯一次,以后就可以直接調用。

存儲過程語法:

  1. 創建語句:create or replace procedure 存儲過程名。如果沒有or replace語句,則僅僅是新建一個存儲過程。如果系統存在該存儲過程,則會報錯。Create or replace procedure 如果系統中沒有此存儲過程就新建一個,如果系統中有此存儲過程則把原來刪除掉,重新創建一個存儲過程。
  2. 存儲過程名定義:包括存儲過程名和參數列表。參數名和參數類型。參數名不能重復。參數的數據類型只需要指明類型名即可,不需要指定寬度。 參數的寬度由外部調用者決定。 存儲過程可以有參數,也可以沒有參數。
  3. 變量聲明塊:緊跟着的as (is )關鍵字,可以理解為pl/sql的declare關鍵字,用於聲明變量。 變量聲明塊用於聲明該存儲過程需要用到的變量,它的作用域為該存儲過程。另外這里聲明的變量必須指定寬度。
  4. 過程語句塊:從begin 關鍵字開始為過程的語句塊。存儲過程的具體邏輯在這里來實現。
  5. 異常處理塊:關鍵字為exception ,為處理語句產生的異常。該部分為可選 。
  6. 結束塊:由end關鍵字結束。

存儲過程的參數傳遞方式 :
  存儲過程的參數傳遞有三種方式:IN,OUT,IN OUT .
  IN 按值傳遞,並且它不允許在存儲過程中被重新賦值。如果存儲過程的參數沒有指定存參數傳遞類型,默認為IN 

 1 create or replace procedure proc1(   
 2   p_para1 varchar2,   
 3   p_para2 out varchar2,   
 4   p_para3 in out varchar2   
 5 )as    
 6  v_name varchar2(20);   
 7 begin   
 8   p_para1 :='aaa';   
 9   p_para2 :='bbb';   
10   v_name := '張三豐';   
11   p_para3 := v_name;   
12   dbms_output.put_line('p_para3:'||p_para3);   
13   null;   
14 end; 

  OUT 參數:作為輸出參數,需要注意,當一個參數被指定為OUT類型時,就算在調用存儲過程之前對該參數進行了賦值,在存儲過程中該參數的值仍然是NULL.

  IN OUT 是真正的按引用傳遞參數。即可作為傳入參數也可以作為傳出參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM