首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 預存程序變數宣告:區域變數 vs 會話變數

     編輯:MySQL 資料庫相關知識

MySQL 預存程序支援兩種變數作用域:區域變數 與 會話變數。理解兩者差異對編寫正確的預存邏輯至關重要。

1. 區域變數

  • 以 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 不受影響。

2. 會話變數

  • 無需宣告,直接以 @變數名 形式賦值使用(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,確認會話變數在整個程序中同步更新。

選擇建議

  • 需在特定邏輯區塊隔離狀態時,使用 區域變數。
  • 需在預存程序多處、甚至多個預存程序間共享狀態時,使用 會話變數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved