數據庫中的存儲過程
定義:
所謂存儲過程(Stored Procedure),就是一組用於完成特定數據庫功能的SQL語句集,該SQL語句集經過
編譯後存儲在數據庫系統中。在使用時候,用戶通過指定已經定義的存儲過程名字並給出相應的存儲過程參數
來調用並執行它,從而完成一個或一系列的數據庫操作。
oracle的存儲過程優缺點:
1.存儲過程可以使得程序執行效率更高、安全性更好,因為過程建立之後已經編譯並且儲存到數據庫,直接寫sql就需要先分析再執行因此過程效率更高,直接寫sql語句會帶來安全性問題,如:sql註入 ;
2.建立過程不會很耗系統資源,因為過程只是在調用才執行;
3.存儲過程可以用於降低網絡流量,存儲過程代碼直接存儲於數據庫中,所以不會產生大量T-sql語句的代碼流量;
4.使用存儲過程使您能夠增強對執行計劃的重復使用,由此可以通過使用遠程過程調用 (RPC) 處理服務器上的存儲過程而提高性能。RPC 封裝參數和調用服務器端過程的方式使引擎能夠輕松地找到匹配的執行計劃,並只需插入更新的參數值;
5.可維護性高,更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力;
6.代碼精簡一致,一個存儲過程可以用於應用程序代碼的不同位置;
7.增強安全性:
a、通過向用戶授予對存儲過程(而不是基於表)的訪問權限,它們可以提供對特定數據的訪問;
b、提高代碼安全,防止 SQL註入(但未徹底解決,例如,將數據操作語言--DML,附加到輸入參數);
c、SqlParameter 類指定存儲過程參數的數據類型,作為深層次防禦性策略的一部分,可以驗證用戶提供的值類型(但也不是萬無一失,還是應該傳遞至數據庫前得到附加驗證)。
缺點就是:
1、大量的利用過程,會對數據庫服務器壓力比較大。
存儲過程的創建
Oracle存儲過程包含三部分:過程聲明,執行過程部分,存儲過程異常。
(1)無參存儲過程語法
create or replace procedure NoParPro as //聲明 ; begin // 執行 ; exception//存儲過程異常 ; end;
(2)帶參存儲過程實例
create or replace procedure queryempname(sfindno emp.empno%type) as sName emp.ename%type; sjob emp.job%type; begin .... exception .... end;
數據庫中的存儲過程