將常用或複雜的 SQL 邏輯預先編寫、編譯並以指定名稱儲存,調用時只需 EXECUTE 即可自動完成。
一般 SQL 每次執行皆需編譯;預存程序僅建立時編譯一次,後續執行直接運行執行計畫,大幅提升效能。
| 類型 | 前綴 | 用途 |
|---|---|---|
| 系統預存程序 | sp_ | 系統設定、資訊查詢、管理工作 (如 sp_help) |
| 擴展預存程序 | xp_ | 呼叫作業系統功能 (如 xp_cmdshell 'ping 10.8.16.1') |
| 使用者自定義 | 自訂 | 業務邏輯核心,本文重點 |
CREATE PROCEDURE procedure_name
[@parameter data_type] [OUTPUT]
[WITH] {RECOMPILE | ENCRYPTION}
AS
sql_statement
OUTPUT:標記該參數可回傳值WITH RECOMPILE:每次執行重新編譯(應對參數嗅探問題)WITH ENCRYPTION:加密程序內容,防止檢視CREATE PROCEDURE proc_name ([IN|OUT|INOUT] param_name type)
BEGIN
-- SQL 陳述式
END;
MySQL 使用 DELIMITER 變更語句結束符以支援複合語句。