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

Stored Procedure MySQL dùng biến trong LIMIT

Vấn đề

MySQL không cho phép biến trực tiếp trong LIMIT ?, ?. Cần dùng Prepared Statement.

Giải pháp: PREPARE + EXECUTE

DELIMITER //
CREATE PROCEDURE Sp_limit(IN beg INT, IN end INT)
BEGIN
    PREPARE myStatement FROM 
        'SELECT * FROM LimitWithStoredProcedure LIMIT ?, ?';
    SET @beginning = beg;
    SET @ending = end;
    EXECUTE myStatement USING @beginning, @ending;
    DEALLOCATE PREPARE myStatement;
END //
DELIMITER ;

Gọi thủ tục

mysql> CALL Sp_limit(4, 7);

Kết quả (bỏ 4 dòng đầu, lấy 7 dòng)

+----+--------+
| Id | Name   |
+----+--------+
| 5  | David  |
| 6  | Carol  |
| 7  | James  |
| 8  | Jace   |
| 9  | Robert |
| 10 | Mike   |
| 11 | Sam    |
+----+--------+

Giải thích tham số LIMIT

  • LIMIT offset, row_count
  • beg = 4 → offset = 4 (bỏ 4 dòng đầu: Id 1-4)
  • end = 7 → row_count = 7 (lấy 7 dòng: Id 5-11)

Tại sao cần Prepared Statement?

  • MySQL không hỗ trợ placeholder trong LIMIT cho biến trực tiếp
  • PREPARE tạo statement template với ?
  • EXECUTE gán giá trị cho ? qua USING
  • DEALLOCATE PREPARE giải phóng tài nguyên

MySQL 8.0+ hỗ trợ LIMIT với biến?

Vẫn chưa hỗ trợ trực tiếp. Prepared Statement vẫn là cách chuẩn.