類似編程語言中的函數,將一組 SQL 語句封裝,支持參數傳遞、條件判斷、循環等流程控制,實現 SQL 級編程。
SHOW PROCEDURE STATUS;
SHOW CREATE PROCEDURE proc_name;
關鍵點:使用 DELIMITER // 臨時修改語句分隔符,避免過程體內分號衝突。
DELIMITER //
CREATE PROCEDURE p1()
BEGIN
SELECT COUNT(*) FROM goods;
END //
DELIMITER ;
CALL p1();
DELIMITER //
CREATE PROCEDURE p2(OUT a INT)
BEGIN
SELECT COUNT(*) INTO a FROM goods;
END //
DELIMITER ;
CALL p2(@cnt);
SELECT @cnt;
DELIMITER //
CREATE PROCEDURE p3(IN a INT)
BEGIN
SELECT goods_id, goods_name, shop_price FROM goods WHERE goods_id = a;
END //
DELIMITER ;
CALL p3(1);
DELIMITER //
CREATE PROCEDURE p4(IN score INT)
BEGIN
IF score >= 60 THEN
SELECT '及格';
ELSE
SELECT '不及格';
END IF;
END //
DELIMITER ;
DELIMITER //
CREATE PROCEDURE p5(IN n INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE sum INT DEFAULT 0;
WHILE i <= n DO
SET sum = sum + i;
SET i = i + 1;
END WHILE;
SELECT sum;
END //
DELIMITER ;
DROP PROCEDURE IF EXISTS p1;
| 特性 | 存儲過程 | 函數 |
|---|---|---|
| 返回值 | 無返回值(通過 OUT 參數返回) | 必須有 RETURN 值 |
| 調用方式 | CALL proc() | SELECT func() / 在 SQL 中直接使用 |
| 事務控制 | 可執行 COMMIT/ROLLBACK | 不可執行事務控制 |