Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sử dụng DECLARE khai báo biến trong Stored Procedure MySQL

Vấn đề: Khai báo và sử dụng biến cục bộ trong Stored Procedure

Trong MySQL, biến cục bộ (DECLARE) chỉ dùng được bên trong BEGIN ... END của Stored Procedure/Function/Trigger.

Cú pháp

DECLARE variable_name data_type [DEFAULT default_value];

Ví dụ: Stored Procedure tính bình phương

DELIMITER //

CREATE PROCEDURE square_demo(IN Value INT)
BEGIN
    DECLARE magicValue INT;        -- Khai báo biến
    SET magicValue = Value;        -- Gán giá trị
    SELECT CONCAT('Your Square Value=', magicValue * magicValue) AS Output;
END //

DELIMITER ;

Gọi procedure

CALL square_demo(15);

Kết quả

+-----------------------+
| Output                |
+-----------------------+
| Your Square Value=225 |
+-----------------------+

Các lưu ý quan trọng

  • DECLARE phải đặt ngay sau BEGIN, trước mọi câu lệnh khác.
  • Biến cục bộ chỉ tồn tại trong phạm vi BEGIN ... END hiện tại.
  • Khác với biến người dùng (user-defined variables) @var – dùng ở đâu cũng được, không cần DECLARE, tồn tại suốt session.
  • Gán giá trị: SET var = value; hoặc SELECT ... INTO var;.
  • DELIMITER // thay đổi ký tự kết thúc câu lệnh để tránh xung đột với ; bên trong procedure.

Ví dụ nâng cao: Biến trong cursor

CREATE PROCEDURE process_data()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE v_id INT;
    DECLARE v_name VARCHAR(50);
    DECLARE cur CURSOR FOR SELECT id, name FROM source_table;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO v_id, v_name;
        IF done THEN LEAVE read_loop; END IF;
        -- Xử lý v_id, v_name
    END LOOP;
    CLOSE cur;
END