存儲過程是數據庫對象之一,存儲過程能夠理解成數據庫的子程序,在客戶端和服務器端能夠直接調用它。觸發器是與表直接關聯的特殊的存儲過程,是在對錶記錄進行操做時觸發的。數據庫
存儲過程放在字典裏,能夠在不一樣用戶和應用程序之間共享,並能夠實現程序的優化和重用。緩存
存儲過程的優勢:安全
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 過程名;