2009-07-11 8 views
23
paramètre sur

j'ai une procédure stockée à partir de cette mysql (google book), et un exemple est la suivante:mysql-procédure stockée:

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 compile bien. (J'utilise MySQL Query Browser 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 pas cet exemple de travail?

Répondre

29

Impossible de répliquer. Cela a fonctionné très bien 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.

+0

Voici toute erreur: Vous avez un erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'SELECT @out_value' à la ligne 2 – domagojk

+2

OK. Il me semble que c'est quelque chose à voir avec votre présence dans le navigateur de requêtes. Essayez-le depuis l'outil de ligne de commande mysql. – chaos

+0

avait le même problème avec le QueryBrowser. – fubo

1

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

Je ne sais pas ce que j'appelle certaines procédures avant avec succès (mais là où aucun sur les paramètres) ...

pour celui-ci j'étais entré

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

Et il en résulte une erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT @out_value' at line 2

Étrangement, si je viens d'écrire:

CALL my_sqrt(4,@out_value); 

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

je suppose que, pour l'instant je vais utiliser la borne seulement ...

2

Je sais c'est un vieux fil, mais si quelqu'un cherche une réponse de la raison pour laquelle leurs procédures ne fonctionnent pas dans le workbench et pensent 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 cachée. Je ne sais pas pourquoi, je comprends que c'est agaçant, 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 (haut et bas) vous pouvez ensuite cliquer et faire glisser cette ligne, puis vous verrez une console avec le message que vous avez manqué!

5

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) 
+0

IN est facultatif, rien avant qu'un paramètre n'implique IN –

+0

Alors, comment pouvons-nous distinguer que le paramètre est pour l'entrée ou la sortie ...? –

+0

C'est une mauvaise pratique, mais la requête serait toujours valide. –

1
SET out_number=SQRT(input_number); 

Au lieu de cette écriture:

select SQRT(input_number); 

S'il vous plaît ne pas écrire SET out_number et votre paramètre d'entrée doit être:

PROCEDURE `test`.`my_sqrt`(IN input_number INT, OUT out_number FLOAT) 
+0

et la requête sql est CALL my_sqrt (4, @ out_value); –

Questions connexes