2012-07-05 48 views
7

Tôi có một thủ tục lưu trữ trong đó nếu tôi viết các truy vấn sau đây mà không có một thay đổi, tất cả: hoạt động tốtThủ tục lưu trữ, sử dụng biến trong LIMIT biểu

CREATE PROCEDURE `some_proc`() 
BEGIN 
SELECT blabla FROM mytable ORDER BY id LIMIT 3,1 
..... 

nhưng, nếu tôi sử dụng một biến như số bắt đầu trong LIMIT biểu thức, tôi gặp lỗi:

CREATE PROCEDURE `some_proc`() 
BEGIN 
DECLARE start INT; 
SET start = 3; 
SELECT blabla FROM mytable ORDER BY id LIMIT start,1 
..... 

Có cách nào để sử dụng biến trong biểu thức LIMIT bên trong quy trình được lưu trữ không?

+0

thể trùng lặp của [đi qua LIMIT như tham số cho MySQL sproc] (http://stackoverflow.com/questions/2875238/passing-limit-as-parameters-to-mysql -sproc) – Pang

Trả lời

17

Bạn không thể sử dụng biến trực tiếp. Một giải pháp tốt mà tôi đã thấy là -

CREATE PROCEDURE `some_proc` (
IN _START INTEGER, 
IN _LIMIT INTEGER 
) 
BEGIN 
PREPARE STMT FROM 
" SELECT * FROM products LIMIT ?,? "; 
SET @START = _START; 
SET @LIMIT = _LIMIT; 
EXECUTE STMT USING @START, @LIMIT; 
DEALLOCATE PREPARE STMT; 
END $$ 

Tìm kiếm khác trả lại số này - http://bugs.mysql.com/bug.php?id=8094.

Ngoài ra, bạn có thể đọc thêm về các câu lệnh đã chuẩn bị trong manual.

7

Bạn có thể làm điều đó trong MySQL 5.5 - SELECT statement.

Từ các tài liệu:

Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables as of MySQL 5.5.6.

Các vấn đề liên quan