DECLARE var_name [, var_name ...] type [DEFAULT value];
-- 範例
DECLARE last_date DATE;
DECLARE v_count INT DEFAULT 0;
變數作用域限於 BEGIN ... END 區塊,必須宣告在複合陳述式最前端。
SET var_name = expr [, var_name = expr] ...;
-- 範例
SET last_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH);
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 或確保唯一條件。SET @var = ... 使用者變數,但預存程序建議使用區域變數。