2009-08-25 3 views
0

Hier ist ein Beispiel von dem, was ich tun möchte. Die gespeicherte Prozedur kann nicht erstellt werden, während LIMIT in der Abfrage vorhanden ist. Wenn ich das LIMIT abnehme, wird das Verfahren erstellt.Wie kann ein Limit an eine Abfrage in einer mysql 5 gespeicherten Prozedur übergeben werden?

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 

Antwort

3

Das Problem ist, dass die Zahl hinter Grenze eine Konstante sein muss und nicht ein Parameter sein, der nach this bug report in späteren Versionen von MySQL nicht fixierten bleibt. Sie könnten die (hässlich wie die Hölle) Abhilfe versuchen 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

ich in dem sah, aber ich kann nicht herausfinden, wie meine Ergebnisse in einen Cursor zu bekommen, so dass ich sie in einem späteren Einsatz verwenden könnte. – ScArcher2

Verwandte Themen