預存程序、函數、觸發器,預存程序觸發器
預存程序、函數、觸發器的區別
比較項目 |
預存程序 |
函數 |
是否有傳回值 |
可以有,也可以沒有 |
必須有且只有一個 |
是否可以單獨執行 |
可以 |
必須通過execute執行 |
SQL語句(DML或SELECT)可否調用 |
不可以 |
可以,且可以位於FROM關鍵字的後面(由於可以返回表對象) |
參數類型 |
可以使用IN、OUT、IN OUT三種模式的參數 |
只有IN,Oracle可以使用IN、OUT、IN OUT三種參數 |
傳回值類型 |
可以通過OUT、IN OUT參數返回零個或多個參數值 |
單一值或一個表對象 |
1)一般來說,預存程序實現的功能要複雜一點,而函數實現的功能針對性比較強。
2)預存程序一般是作為一個獨立的部分來執行(參照下面“預存程序-調用方法”),而函數可以作為查詢語句的一個部分來調用(用在select後面,或者from後面)。由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。
預存程序
預存程序(Stored Procedure )是一組為了完成特定功能的SQL 陳述式集,經編譯後儲存在資料庫中。預存程序經過語法檢查和編譯的SQL語句,所以執行速度比普通的SQL語句的執行速度快。使用者通過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來執行它。
特點缺點基本文法
create procedure <過程名>(<參數列表,無參時忽略>)as|is變數聲明、初始化begin業務處理、邏輯代碼exception異常捕獲、容錯處理end <過程名>;參數:<參數名> in|out|in out <參數類型,無長度說明> ,如:v_name varchar2in:入參out:出參in out:出入參註:as|is表示as或is
調用文法
調用文法:
1)exec <過程名>;
2)execute <過程名>;
3)對於Oracle資料庫,可在PL/SQL語句塊中直接調用。(Oracle)
函數
資料庫中的函數包括內建函數和自訂函數,內建函數是諸如SUM(),COUNT(),AVG()等資料庫內建的函數。一般我們編寫的函數都屬於自訂函數。
特點基本文法
create function <函數名>(<參數列表,無參時忽略>)return <傳回值類型,無長度說明>as|is變數聲明、初始化begin業務處理、邏輯代碼return <返回的值>;exception異常捕獲、容錯處理end <函數名>;參數:in 入參註:只有入參的類型。
調用文法
1)在SQL語句(DML或SELECT)中調用函數
2)對於Oracle資料庫,可在PL/SQL語句塊中直接調用。(Oracle)
觸發器
觸發器是特殊的預存程序,預存程序需要程式調用,而觸發器會自動執行;