萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 預存程序變數宣告、賦值與查詢賦值完整教學

變數宣告

DECLARE var_name [, var_name ...] type [DEFAULT value];
-- 範例
DECLARE last_date DATE;
DECLARE v_count INT DEFAULT 0;

變數作用域限於 BEGIN ... END 區塊,必須宣告在複合陳述式最前端。

直接賦值(SET)

SET var_name = expr [, var_name = expr] ...;
-- 範例
SET last_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH);

查詢賦值(SELECT ... INTO)

SELECT col_name INTO var_name [, var_name ...] FROM table_expr WHERE ...;
-- 必須確保查詢僅回傳單一資料列

完整函數範例:計算客戶未付金額

CREATE FUNCTION get_cost(p_custid INT, p_eff DATETIME)
RETURNS DECIMAL(5,2)
DETERMINISTIC
READS SQL DATA
BEGIN
    DECLARE v_pay DECIMAL(5,2);
    SELECT IFNULL(SUM(pay.amount), 0) INTO v_pay
    FROM payment
    WHERE pay.pay_date <= p_eff AND pay.cust_id = p_custid;
    RETURN v_rent + v_over - v_pay; -- 假設 v_rent, v_over 已定義
END;

注意事項

  • 變數名稱不區分大小寫,建議統一小寫並加前綴(如 v_)避免與欄位衝突。
  • SELECT ... INTO 若回傳多列會報錯 1172,務必加 LIMIT 1 或確保唯一條件。
  • MySQL 8.0+ 支援 SET @var = ... 使用者變數,但預存程序建議使用區域變數。
copyright © 萬盛學電腦網 all rights reserved