2009-08-25 68 views
0

下面是我想要做的一個示例。 當查詢中存在LIMIT時,存儲過程無法創建。 如果我將LIMIT關閉,程序創建。如何傳遞限制到MySQL 5存儲過程中運行的查詢?

CREATE PROCEDURE LimitTest(IN in_start INTEGER UNSIGNED, IN in_limit INTEGER UNSIGNED) 
BEGIN 
    DECLARE no_more_results INTEGER DEFAULT 0; 
    DECLARE var_result INTEGER UNSIGNED; 
    DECLARE row CURSOR FOR SELECT id from test LIMIT in_start,in_limit; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND 
    SET no_more_results = 1; 
    OPEN row; 
     FETCH row INTO var_result; 
     REPEAT 
     INSERT INTO results VALUES(var_result); 
     FETCH row INTO var_result; 
     UNTIL no_more_results = 1 
     END REPEAT; 
    CLOSE row; 
END 

回答

3

的問題是,後面的限制數量必須是一個常量,不能根據this bug report這仍然是在MySQL的後續版本不固定的參數。你可以嘗試(醜陋的地獄)的解決方法outlined here: -

CREATE PROCEDURE sp (
IN LimitStart_ INT, 
IN LimitCnt_ INT 
) 
BEGIN 
SET @lim = CONCAT(' LIMIT ', LimitStart_, ',', LimitCnt_); 
SET @q = "SELECT mycol FROM mytable"; 

SET @q = CONCAT(@q, @lim); 
PREPARE st FROM @q; 
EXECUTE st; 
DEALLOCATE PREPARE st; 
END; 
+0

我看着這一點,但我無法弄清楚如何讓我的成績進入光標,這樣我可以在以後的插入使用。 – ScArcher2

相關問題