Mysql créer dynamiquement de la chaîne de requête dans une procédure stockée basé sur la logique
L'objectif est de modifier une chaîne de requête dans une base de données Mysql procédure stockée en fonction des variables d'entrée.
Quelque chose comme ceci:
CREATE DEFINER=`root`@`localhost` PROCEDURE `func`(type VARCHAR(15))
BEGIN
SET @type = type;
-- Check for the sort parameter
if @type="asc" THEN
SET @sort = " order by name asc";
elseif @type="desc" THEN
SET @sort = " order by name desc";
else
SET @sort ="";
end if;
SELECT id, name from table @sort;
END
La solution est d'utiliser exécuter, et concat: CRÉER DEFINER=
Si c'est la solution pour laquelle vous n'avez pas l'ajouter comme une réponse et de l'accepter ou de le modifier à votre question avec elle.
Sans 100 points de réputation, je dois attendre 8 heures pour répondre à ma propre question
Puis attendre. La limitation n'a pas été mis en place parce que les devs veulent que vous postez votre réponse dans le mauvais endroit, il a été mis en place parce qu'ils veulent que vous attendez. Il y a des raisons pour cela.
De bons conseils. Je vous remercie.
root
@localhost
PROCÉDURE test
(input de type VARCHAR(15)) BEGIN SET @input = entrée; si @input="asc" puis SET @tri = "commande par ActivityLogKey asc"; elseif @input = "desc" puis SET @tri = "commande par ActivityLogKey desc"; else SET @tri =""; fin si; SET @query = CONCAT('select * from activitylog ',@tri,'limit 0, 5'); PRÉPARER stmt DE @requête; EXECUTE stmt; DÉSALLOUER PRÉPARER stmt; FINSi c'est la solution pour laquelle vous n'avez pas l'ajouter comme une réponse et de l'accepter ou de le modifier à votre question avec elle.
Sans 100 points de réputation, je dois attendre 8 heures pour répondre à ma propre question
Puis attendre. La limitation n'a pas été mis en place parce que les devs veulent que vous postez votre réponse dans le mauvais endroit, il a été mis en place parce qu'ils veulent que vous attendez. Il y a des raisons pour cela.
De bons conseils. Je vous remercie.
OriginalL'auteur Ben Guthrie | 2011-12-18
Vous devez vous connecter pour publier un commentaire.
La solution est d'utiliser exécuter, et concat:
BTW, d'exécuter et de concat la solution, même si c'est pas de la définition d'une procédure stockée; un bon exemple en vertu de l' "Mais si vous ne changez pas... mettre en œuvre une instruction préparée pour générer le SQL dynamique." Taryn réponse ici. Je trouve cela utile pour les "jetables" (une seule fois) des requêtes.
OriginalL'auteur Ben Guthrie