MySQL 儲存過程不支援 RETURN 直接退出(僅函數可用)。需結合標籤與 LEAVE 實現流程跳出。
CREATE PROCEDURE proc_name(params)
label_name: BEGIN
-- 邏輯判斷
IF condition THEN
LEAVE label_name; -- 直接跳出 BEGIN...END 區塊
END IF;
-- 後續邏輯不會執行
END;
CREATE PROCEDURE `proname`(uid INT, rid INT, OUT errorno INT, ...)
top: BEGIN
-- 業務檢查
IF uid <= 0 THEN
SET errorno = -1;
LEAVE top; -- 立即退出過程
END IF;
-- 正常流程
SELECT * FROM users WHERE id = uid;
-- ...
END;
:(如 top:、proc_block:)LEAVE label 可跳出 BEGIN...END、LOOP、WHILE、REPEAT、IF、CASE 區塊ITERATE label 為重新開始迴圈(類似 continue)OUT 需在 LEAVE 前賦值,否則呼叫端收到 NULLCREATE FUNCTION fn_test(p INT) RETURNS INT
BEGIN
IF p < 0 THEN RETURN -1; END IF;
RETURN p * 2;
END;
儲存過程用 LEAVE 標籤,函數用 RETURN,兩者退出機制不同,切勿混淆。