MySQL 預存程序支援兩種變數作用域:區域變數 與 會話變數。理解兩者差異對編寫正確的預存邏輯至關重要。
DECLARE 關鍵字宣告,語法:DECLARE 變數名 資料型態 [DEFAULT 預設值];BEGIN ... END 區塊內。DELIMITER //
CREATE PROCEDURE p1()
BEGIN
DECLARE x CHAR(10) DEFAULT 'outer';
BEGIN
DECLARE x CHAR(10) DEFAULT 'inner';
SELECT x; -- 輸出 inner
END;
SELECT x; -- 輸出 outer
END//
DELIMITER ;
CALL p1();
結果證明:內層 x 僅在內層 BEGIN...END 生效,外層 x 不受影響。
@變數名 形式賦值使用(SET @t = 1;)。BEGIN...END 區塊可見。DELIMITER //
CREATE PROCEDURE p2()
BEGIN
SET @t = 1;
BEGIN
SET @t = 2;
SELECT @t; -- 輸出 2
END;
SELECT @t; -- 輸出 2
END//
DELIMITER ;
CALL p2();
兩次 SELECT 均輸出 2,確認會話變數在整個程序中同步更新。