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

MySQL 5.0 新特性教程:存儲過程 (三) — 變數、條件判斷、IF-THEN-ELSE

     編輯:MySQL 資料庫相關知識

變數宣告與使用

DECLARE 語法

DECLARE 變數名 資料類型 [DEFAULT 預設值];
  • 僅能在 BEGIN ... END 區塊內宣告
  • 非會話變數 (@var),不可用 @ 前綴
  • 作用域限定於宣告所在的 BEGIN ... END 區塊
  • 宣告後可在任何可用字面值/欄位/會話變數的地方使用

初始化方式

-- 方式 1: 無 DEFAULT,後續 SET
DECLARE a INT;
DECLARE b INT;
SET a = 5;
SET b = 5;

-- 方式 2: DEFAULT 子句
DECLARE a, b INT DEFAULT 5;

呼叫測試

CREATE PROCEDURE p10()
BEGIN
    DECLARE a, b INT DEFAULT 5;
    INSERT INTO t VALUES (a);
    SELECT s1 * a FROM t WHERE s1 >= b;
END;

CALL p10();
-- 結果: 25, 25 (兩列 s1=5, a=5, 5*5=25)

變數作用域與巢狀區塊

CREATE PROCEDURE p11()
BEGIN
    DECLARE x1 CHAR(5) DEFAULT 'outer';
    BEGIN
        DECLARE x1 CHAR(5) DEFAULT 'inner';
        SELECT x1;  -- 顯示 inner
    END;
    SELECT x1;      -- 顯示 outer
END;
  • 內層同名變數遮蔽外層 (優先權較高)
  • 內層區塊結束 (END) 時變數銷毀,外層變數恢復可見
  • 跨區塊傳值:用 OUT 參數或指派給會話變數 (@var)

條件判斷:IF-THEN-ELSE

語法結構

IF 條件 THEN
    陳述式...
[ELSEIF 條件 THEN
    陳述式...]
[ELSE
    陳述式...]
END IF;

範例:參數驅動的不同業務邏輯

CREATE PROCEDURE p12 (IN parameter1 INT)
BEGIN
    DECLARE variable1 INT;
    SET variable1 = parameter1 + 1;
    
    IF variable1 = 0 THEN
        INSERT INTO t VALUES (17);
    END IF;
    
    IF parameter1 = 0 THEN
        UPDATE t SET s1 = s1 + 1;
    ELSE
        UPDATE t SET s1 = s1 + 2;
    END IF;
END;

執行流程追蹤

  • CALL p12(0):parameter1=0 → variable1=1 → 第一個 IF 不執行 → 第二個 IF 執行 s1+1
  • CALL p12(-1):variable1=0 → 第一個 IF 執行 INSERT → 第二個 IF 執行 s1+1
  • CALL p12(5):variable1=6 → 兩個 IF 皆不執行第一分支 → 執行 s1+2

CASE 陳述式 (替代多重 IF)

CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list]...
    [ELSE statement_list]
END CASE;

-- 或搜尋條件形式
CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list]...
    [ELSE statement_list]
END CASE;

CASE 結構更清晰,適合多重互斥條件分支。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved