Oracle中存儲過程的使用


一、什么是存儲過程:
      存儲過程(Stored Procedure )是一組為了完成特定功能的SQL 語句集,經編譯后存儲在數據庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是數據庫中的一個重要對象,任何一個設計良好的數據庫應用程序都應該用到存儲過程。
      存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化后存儲在數據庫服務器中,應用程序使用時只要調用即可。在ORACLE 中,若干個有聯系的過程可以組合在一起構成程序包。其優點如下:
   1. 存儲過程和函數以命名的數據庫對象形式存儲於數據庫當中。存儲在數據庫中的優點是很明顯的,因為代碼不保存在本地,用戶可以在任何客戶機上登錄到數據庫,並調用或修改代碼。
  2. 存儲過程和函數可由數據庫提供安全保證,要想使用存儲過程和函數,需要有存儲過程和函數的所有者的授權,只有被授權的用戶或創建者本身才能執行存儲過程或調用函數。
  3. 存儲過程和函數的信息是寫入數據字典的,所以存儲過程可以看作是一個公用模塊,用戶編寫的PL/SQL程序或其他存儲過程都可以調用它(但存儲過程和函數不能調用PL/SQL程序)。一個重復使用的功能,可以設計成為存儲過程。
  4. 像其他高級語言的過程和函數一樣,可以傳遞參數給存儲過程或函數,參數的傳遞也有多種方式。存儲過程可以有返回值,也可以沒有返回值,存儲過程的返回值必須通過參數帶回;函數有一定的數據類型,像其他的標准函數一樣,我們可以通過對函數名的調用返回函數值。
  5. 存儲過程和函數需要進行編譯,以排除語法錯誤,只有編譯通過才能調用。
 
二、 創建存儲過程:
create [or replace] procedure 存儲過程名 [(輸入、輸出參數、in/out模式參數)]  
is/as  
begin  
  sentences;  
    [exception  
     sentences;]  
end 存儲過程名;  
 
【例1一個沒有參數的存儲過程:
SQL>set serveroutput on
SQL> create or replace procedure pro_no_par is
  2  begin
  3   update emp set sal=sal+800 where id=3;
  4  commit;
  5  dbms_output.put_line('工資已經調整!!');
  6  end pro_no_par;
  7  /
 
SQL> execute pro_no_par;
    工資已經調整!!
PL/SQL 過程已成功完成。
 
 【例2一個帶in模式參數的存儲過程( 參數的方式有三種:指定名稱傳遞;按位置傳遞;混合方式傳遞
 
SQL>  set serveroutput on
SQL>  create or replace procedure pro_in_par
  2   (var_1 in nvarchar2,
  3    var_2 in number) is
  4   begin
  5    update emp set sal=sal+var_2 where ename=var_1;
  6    commit;
  7   dbms_output.put_line(var_1 ||'的工資已經增加了'||var_2||'元!');
  8  end pro_in_par;
          9  /
       
      SQL> execute pro_in_par('Smith',1500);
     Smith的工資已經增加了1500元!
 
 
  【例3一個帶out模式和in out模式參數存儲過程
          
SQL> create or replace procedure pro_out_par
  2  (var_1 in out number,
  3   var_2 out emp.ename%type,
  4   var_3 out emp.sal%type) is
  5  begin
  6   select ename,sal into var_2,var_3 from emp where id=var_1;
  7  end pro_out_par;
  8  /
 
SQL>set serveroutput on
SQL>declare
  2 ex_var_1 number;
  3 ex_var_2 emp.ename%type;
  4 ex_var_3 emp.sal%type;
  5 begin
  6   ex_var_1:=8;
  7   pro_out_par(ex_var_1,ex_var_2,ex_var_3);
  8   dbms_output.put_line('員工號為'||ex_var_1||'的員工姓名是:'||ex_var_2||'工資是:'||ex_var_3);
  9 end;
 10  /
 
    員工號為8的員工姓名是:周瑜工資是:8500
 
三、存儲過程參數說明:三種形式的參數
         1. IN 定義一個輸入參數變量,用於傳遞參數給存儲過程
       2. OUT 定義一個輸出參數變量,用於從存儲過程獲取數據
       3. IN OUT 定義一個輸入、輸出參數變量,兼有以上兩者的功能
 
四、 刪除存儲過程
 
              DROP PROCEDURE 存儲過程名;
      例如: 
             SQL> drop procedure pro_no_par;
             過程已刪除。
 
 


免責聲明!

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



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