2009-03-09 6 views
9

J'ai une procédure stockée MySQL avec quelques curseurs. Je veux imprimer une valeur pour renvoyer la sortie au client. SQLyog Enterprise.Comment simuler une impression dans une procédure stockée MySQL

J'ai essayé de déclarer une variable comme TEXT et de la concaténer à l'intérieur de la boucle mais cela ne fonctionne pas, du moins pas la façon dont j'essayais de le faire.

DECLARE _output TEXT; 
DECLARE _ID INT DEFAULT 0; 
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

OPEN cur1; 

REPEAT 
    FETCH cur1 INTO _ID; 
    IF NOT done THEN 
    SET _output = _ID; /*SEE ALT BELOW*/ 

    END IF; 
UNTIL done END REPEAT; 
CLOSE cur1; 

SELECT _output; 

J'ai essayé:

SET _output = _output + _ID 

et

SET _output = CONCAT(_output,_ID) 

, mais ils ont tous deux juste retour NULL

SET _output = _ID; me donne juste la dernière ligne récupérée. Ce qui est utile mais pas tout à fait ce que je voulais.

Quelle est la meilleure façon d'avoir chaque sortie de ligne récupérée à l'écran pour reproduire l'impression MySQL dans une procédure stockée MySQL?

Répondre

14

Vous le faites correctement avec votre SELECT _output; Tout ce qui est sélectionné sans clause INTO sera retourné au client. Pour les obtenir, vous pouvez soit déplacer le SELECT dans la boucle (pour les imprimer individuellement), soit les concaténer ensemble. Le problème avec votre concat retournant NULL était parce que vous n'avez pas initialisé le _output à quoi que ce soit donc c'était NULL. La concaténation de n'importe quoi avec NULL retournera NULL.

les opérations suivantes:

DECLARE _output TEXT DEFAULT ''; 
DECLARE _ID INT DEFAULT 0; 
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

OPEN cur1; 

REPEAT 
    FETCH cur1 INTO _ID; 
    IF NOT done THEN 
    SET _output = CONCAT(",", _ID); /*SEE ALT BELOW*/ 

    END IF; 
UNTIL done END REPEAT; 
CLOSE cur1; 

SELECT _output; 
+6

Si pas être 'SET _output = CONCAT (_output, "", _ID);' Sinon, il ne le dernier ID – Marcus

Questions connexes