MySQL 5.0 引入儲存過程,將業務邏輯下沉至資料庫層,減少網路往返、提升安全性與效能。本文涵蓋建立、參數傳遞、呼叫、刪除、流程控制、區塊標籤、常用中繼資料查詢。
CREATE PROCEDURE sp_name()
BEGIN
-- SQL 語句
END;
IN:輸入參數(預設),呼叫者傳入,過程內可讀不可寫回。OUT:輸出參數,過程內賦值,呼叫者可讀。INOUT:雙向參數,呼叫者傳入,過程內可修改並回傳。CREATE PROCEDURE sp_get_user(IN p_id INT, OUT p_name VARCHAR(50))
BEGIN
SELECT name INTO p_name FROM users WHERE id = p_id;
END;
CALL sp_name(); -- 無參數
CALL sp_get_user(1, @name); -- 有參數,OUT 用用戶變數接收
SELECT @name;
注意: 即使無參數,呼叫時也必須加括號 ()。
DROP PROCEDURE sp_name;
限制:不能在一個儲存過程中刪除另一個儲存過程,只能呼叫。
BEGIN
-- 語句
END;
label_name: BEGIN
-- 語句
LEAVE label_name; -- 跳出區塊
END label_name;
IF condition THEN
statement;
ELSE
statement;
END IF;
-- WHILE
[label:] WHILE expr DO
statements;
END WHILE [label];
-- LOOP (需配合 LEAVE/ITERATE 跳出)
[label:] LOOP
statements;
END LOOP [label];
-- REPEAT UNTIL
[label:] REPEAT
statements;
UNTIL expr
END REPEAT [label];
-- 列出所有儲存過程基本資訊
SHOW PROCEDURE STATUS;
-- 查看特定過程完整定義
SHOW CREATE PROCEDURE sp_name;
SHOW CREATE PROCEDURE 輸出納入程式碼倉庫。