| 特性 | 存儲過程 | 函數 |
|---|---|---|
| 返回值 | 無(可通過 OUT 參數返回) | **必須**有 RETURNS 返回值 |
| 參數模式 | IN / OUT / INOUT | 僅 IN(隱式) |
| 調用方式 | CALL proc() | SQL 表達式中 func() |
| 事務控制 | 支援 | 不支援 |
-- 存儲過程
CREATE PROCEDURE proc_name ([IN|OUT|INOUT] param type, ...)
[characteristic ...]
BEGIN
-- SQL 語句
END;
-- 函數
CREATE FUNCTION func_name (param type, ...)
RETURNS type
[characteristic ...]
BEGIN
RETURN expr;
END;
characteristic 可設:DETERMINISTIC、READS SQL DATA、SQL SECURITY DEFINER|INVOKER、COMMENT 等。
DELIMITER $$ CREATE PROCEDURE p() BEGIN ... END $$ DELIMITER ;
-- 聲明變量 DECLARE v_sal INT DEFAULT 1000; -- 賦值 SET v_sal = 3500; SELECT sal INTO v_sal FROM t_emp WHERE empno=7556; -- 條件處理 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; -- 游標 DECLARE cur CURSOR FOR SELECT * FROM t_emp; OPEN cur; FETCH cur INTO v_id, v_name; CLOSE cur;
ALTER PROCEDURE proc_name [characteristic ...]; ALTER FUNCTION func_name [characteristic ...]; DROP PROCEDURE IF EXISTS proc_name; DROP FUNCTION IF EXISTS func_name;
SQL SECURITY DEFINER,避免權限提升風險。information_schema.ROUTINES 定期清理廢棄對象。