mysql procédure stockée: paramètre de sortie

J'ai une procédure stockée mysql à partir de ceci (google book), et un exemple est ceci:

DELIMITER $$

DROP PROCEDURE IF EXISTS my_sqrt$$
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT)
BEGIN
    SET out_number=SQRT(input_number);
END$$

DELIMITER ;

La procédure se compile bien. (J'utilise le navigateur de requête MySQL dans ubuntu).

Cependant quand j'appelle la procédure:

CALL my_sqrt(4,@out_value);

(également dans le navigateur de requête)

, Il renvoie une erreur:

(1064) check the manual that correspond to the...

Pourquoi cet exemple ne fonctionne-t-il pas?

24
demandé sur Eric Leschinski 2009-07-11 16:02:55

5 réponses

Impossible de répliquer. Cela a bien fonctionné pour moi:

mysql> CALL my_sqrt(4, @out_value);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @out_value;
+------------+
| @out_value |
+------------+
| 2          | 
+------------+
1 row in set (0.00 sec)

Peut-être que vous devriez coller le message d'erreur entier au lieu de le résumer.

34
répondu chaos 2009-07-11 12:24:48

Vous devez utiliser la signature correcte pour le paramètre d'entrée * IN est manquant dans le code ci-dessous.

CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT)
5
répondu KuldeeP ChoudharY 2015-10-19 12:24:15

Je sais que c'est un vieux thread, mais si quelqu'un cherche une réponse à la raison pour laquelle leurs procédures ne fonctionnent pas dans le workbench et pense que le seul résultat est "requête annulée" ou quelque chose comme ça sans indices:

La sortie avec des erreurs ou des problèmes est hiddenl. Je ne sais pas pourquoi, je comprends que c'est ennuyeux, mais c'est là. il suffit de déplacer votre curseur au-dessus de la ligne au-dessus du message, il va tourner dans une double flèche (de haut en bas), vous pouvez ensuite cliquer et faire glisser cette ligne vers le haut, alors vous voir une console avec le message que vous avez manqué!

2
répondu SomeOne_1 2014-10-07 12:37:00

J'ai juste essayé d'appeler une fonction dans le terminal plutôt que MySQL Query Browser et cela fonctionne. Donc, on dirait que je fais quelque chose de mal dans ce programme...

Je ne sais pas quoi puisque j'ai appelé quelques procédures avant avec succès (mais là où aucun paramètre)...

Pour celui-ci, j'étais entré

CALL my_sqrt(4,@out_value);
SELECT @out_value;

Et il en résulte une erreur:

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour le syntaxe droite à utiliser près de ' SELECT @out_value ' à la ligne 2

Étrangement, si j'écris juste:

CALL my_sqrt(4,@out_value); 

Le message de résultat est: "Requête annulée"

Je suppose que, pour l'instant, je n'utiliserai que le terminal...

1
répondu domagojk 2009-07-11 14:36:48
SET out_number=SQRT(input_number); 

Au Lieu de cela, écrire:

select SQRT(input_number); 

Veuillez NE PAS écrire SET out_number et votre paramètre d'entrée devrait être:

PROCEDURE `test`.`my_sqrt`(IN input_number INT, OUT out_number FLOAT) 
1
répondu Noby Nirmal 2017-11-13 03:56:18