Je crée une classe de pagination et je dois transmettre deux paramètres à ma procédure stockée MySQL pour la clause de limite.
Je les transmettes en tant qu'OB et essaye quelque chose comme ça P>
SELECT * FROM `MyTable` LIMIT MyFirstParamInt, MySecondParamInt
7 Réponses :
avant 5,5,6, en 5.5.6 et au-dessus, vous pouvez simplement transmettre les paramètres Procs stockés en tant qu'arguments sur limite code> n'a pas pu être paramétré dans les procédures stockées MySQL. Vous auriez besoin de construire la requête de manière dynamique et de l'exécuter. P>
Limiter code> et
décalage code> tant qu'ils sont
entier code >. P>
Ce n'est pas la bonne réponse, la bonne est la réponse @eric_m
@Bergkamp: sa réponse ne fonctionnera pas sur la version de MySQL disponible au moment où cette réponse avait été donnée.
@Quassnoi, donc la réponse devrait changer, non?
dev.mysql.com/doc/refman/8.0/fr/Select. HTML "dans les programmes stockés, les paramètres de limite peuvent être spécifiés à l'aide de paramètres de routine entier et de variables locales."
de http://dev.mysql.com/doc/refman /5.1/fr/select.html :
La clause de limite peut être utilisée pour contraindre le nombre de lignes renvoyées par l'instruction SELECT. La limite prend une ou deux arguments numériques,
qui doit être des constantes entières non négatives fortes> (sauf lors de l'utilisation de déclarations préparées). P> blockquote> Voici un exemple de déclaration préparé qui pourrait vous aider: P>
SET @skip=1; SET @rows=5; PREPARE STMT FROM 'SELECT * FROM table LIMIT ?, ?'; EXECUTE STMT USING @skip, @rows;
Je viens de trouver une solution qui peut être utile. Utilisez des variables déclarées dans votre procédure stockée et définissez-les sur vos paramètres
EG. P>
CREATE PROCEDURE MyProcedure( IN paramFrom INT, IN paramTo INT ) BEGIN DECLARE valFrom INT; DECLARE valTo INT; SET valFrom = paramFrom; SET valTo = paramTo; SELECT * FROM myTable LIMIT valFrom, valTo; END
Cela n'a pas fonctionné pour moi en utilisant 5.1.71. Bien que je n'ai aucun problème à adopter des paramètres à l'aide de procédures stockées dans 5.5.33A-MARIADB.
Un embout rapide pour tous lire ces commentaires. Assurez-vous simplement d'ajouter votre clause limite à la fin de votre requête, pour éviter les erreurs.
pagination sans instructions:
Ce qui suit a fonctionné simplement bien dans MySQL 5.5.35. Il a également fonctionné dans une autre procédure dans laquelle le même sélectionner code> a été utilisé dans un
déclarer. . . Curseur code> instruction.
CREATE PROCEDURE `test`(
IN `lim_val` INT,
IN `lim_offset` INT
)
BEGIN
SELECT array_ident_id
FROM ArrayIdents
ORDER BY array_ident_id
LIMIT lim_val OFFSET lim_offset;
END;
Solution simple essayez de préparer la déclaration dans la procédure stockée. p> p>
appel user_list code> (v_private_key, v_user_id, v_pageindex, v_limit, v_image_path,
@O_Rec_Count,
@O_ERROR_CODE,
@O_ERROR_MESSAGE) P>
DECLARE count1 INT;
DECLARE total_pages INT;
SET count1 = in_count;
IF( count1 > 0 ) THEN
SET total_pages = CEIL(count1/in_limit);
ELSE
SET total_pages = 0;
END IF;
IF (in_page > total_pages) THEN
SET in_page=total_pages;
END IF;
SET out_start_limit = in_limit * in_page - in_limit;