2010-12-15 5 views
1

J'ai la routine MySQL suivante:Syntaxe SQL en tant que paramètres pour une routine MySQL?

DELIMITER $$ 

CREATE DEFINER=`root`@`%` PROCEDURE `getGroupOrders`(grp INT, 
                ord CHAR(20), 
                srt CHAR(4), 
                page INT, 
                count INT) 
BEGIN 

    SELECT * 
    FROM `dbre`.`order_info` 
    WHERE username IN (SELECT `dbre`.`users`.`username` 
         FROM `dbre`.`users` 
         WHERE `dbre`.`users`.`id_group` = grp) 
ORDER BY ord srt LIMIT page,count; 

END 

Comme vous pouvez le voir, je veux passer la colonne de commande et le tri en tant que paramètres, mais je reçois une erreur de syntaxe est-il un moyen de faire ceci ou dois-je faire des routines similaires pour chaque type de commande?

+0

... Quelle est l'erreur de syntaxe dire? ligne 3, ligne 13 ou quoi? – ajreal

+0

l'erreur de syntaxe est dans la ligne 'ORDER BY' où j'ai les paramètres' ord' et 'srt', le MySQL dit seulement qu'il y a une erreur mais ne dit pas pourquoi. – Triztian

Répondre

1

Je ne pense pas que ce soit possible dans la façon dont vous l'essayez. Vous ne pouvez pas utiliser une variable pour définir une direction dans la colonne ORDER BY. La seule solution que je peux envisager est de créer une instruction préparée à partir d'une chaîne créée dynamiquement (où vous pouvez utiliser les variables pour spécifier l'ordre par des détails) et ensuite exécuter cette instruction préparée.

Voici un exemple d'une telle déclaration dynamique: http://forums.mysql.com/read.php?98,393613,393642#msg-393642

+0

Je l'ai eu comme un PreparedStatement, mais je tente d'utiliser une approche plus "basée sur la routine". – Triztian

+0

@Triztian: que voulez-vous dire par «approche de routine»? Vous pouvez utiliser une instruction préparée dans une procédure pour autant que je sache –

+0

Désolé, j'ai utilisé les mots incorrects, j'essaie d'utiliser les routines MySQL autant que je peux, ce qui signifie que je ne veux pas de chaînes "Select" dans le java code, juste CallableStatements à une procédure stockée comme ceci: '" {CALL myRoutine();} "', je sais qu'il y aura des moments où il ne peut être évité d'utiliser des instructions préparées mais j'espère que ce n'est pas l'un des leur. – Triztian

Questions connexes