存儲過程

存儲過程是數據庫對象之一,存儲過程能夠理解成數據庫的子程序,在客戶端和服務器端能夠直接調用它。觸發器是與表直接關聯的特殊的存儲過程,是在對錶記錄進行操做時觸發的。數據庫

存儲過程放在字典裏,能夠在不一樣用戶和應用程序之間共享,並能夠實現程序的優化和重用。緩存

存儲過程的優勢:安全

1.存儲過程在服務器端運行,執行速度快。服務器

2.存儲過程執行一次後,代碼就駐留在高速緩存,在之後的操做中,只須要從高速緩存中調用已編譯代碼執行,提升了系統性能。函數

3.確保數據庫安全。能夠不受權用戶直接訪問應用程序中的一些表,而是受權用戶執行訪問這些表的存儲過程,非表的受權用戶除非經過存儲過程,不然就不能訪問這些表。性能

4.自動完成須要執行的任務,存儲過程能夠在系統啓動時自動執行,而沒必要在系統啓動後再進行手工操做,大大方便了用戶的使用,能夠自動完成一些須要預先執行的任務。優化

SQL命令建立存儲過程:spa

create or replace  procedure  過程名稱( 參數名稱   in/out/in out  類型) 
is/as
  begin
      過程體
   end 過程名稱

說明:code

1.過程名稱:存儲過程名稱要符合標識符規則,而且在所屬方案中必須是惟一的。關鍵字 or replace 表示在建立存儲過程時,若是已存在同名的過程,則從新建立server

2.參數名:存儲過程函數的參數名也要符合標識符規則,建立過程時,能夠聲明一個或多個參數,執行過程時應提供相對應的參數,存儲過程的參數模式和函數參數同樣,也有三種模式:in out和in out。

   其中:in 表示參數是輸入給過程的

              out 表示參數在過程當中將被賦值,能夠傳給過程體的外部

              in out 表示該類型的參數既能夠向過程體傳值,也能夠在過程當中賦值

3.過程體:其中包含PL/SQL語句塊

 

在用戶的定義中不能使用下列對象建立語句:

create view

create default

create rule

create procedure

create trigger

--計算指定某門課程參加考試的學生人數。
create  or replace procedure
count_result(v_course  in char,v_num out number)
as
   begin
      select 
      count(*) into v_num
      from  
      SCHOOL_RESULT 
      where 
      RESULT_COURSE=v_course;
   end count_result;
   

注意:在存儲過程體中,不能使用select語句直接查詢,不然會出現編譯錯誤。

 

經過界面建立存儲過程:

 

 

存儲過程的調用:

set serveroutput on;
declare
  v_number number;
  begin
    count_result('100011',v_number);
    dbms_output.put_line(v_number);
  end;

存儲過程的編輯修改:

修改存儲過程和修改視圖同樣,也有alter procedure語句,但它是用於從新編譯或驗證現有過程,若是要修改過程定義,仍然應用reeate or replace procedure命令,語法格式同樣。

也能夠經過界面修改存儲過程(在SQL Developer中"過程"右擊鼠標,選擇「編輯」)

存儲過程的刪除:

當某個過程不在須要時就應將其刪除,以釋放它佔用的內存資源

drop procedure 過程名;