2010-09-30 7 views
0

j'ai essayé cet exemple via phpMyAdmin http://www.databasejournal.com/features/mysql/article.php/3569846/MySQL-Stored-Functions.htmCréation de fonctions dans le travail mysql ne marche pas - erreur 1064

mysql> DELIMITER | 
mysql> 
CREATE FUNCTION WEIGHTED_AVERAGE (n1 INT, n2 INT, n3 INT, n4 INT) 
    RETURNS INT 
    DETERMINISTIC 
    BEGIN 
    DECLARE avg INT; 
    SET avg = (n1+n2+n3*2+n4*4)/8; 
    RETURN avg; 
    END| 

Cela a fonctionné

DELIMITER | 

La déclaration suivante a:

Error 

SQL query: 

CREATE FUNCTION WEIGHTED_AVERAGE(
n1 INT, 
n2 INT, 
n3 INT, 
n4 INT 
) RETURNS INT DETERMINISTIC BEGIN DECLARE avg INT; 

MySQL said: Documentation 
#1064 - 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 '' at line 5 
+1

Quelle version de MySQL utilisez-vous? Je dirais que c'est phpAdmin qui bogue, car cela fonctionne à partir du client de ligne de commande – nos

+0

salut nos - votre solution a fonctionné - c'était bien à partir de la ligne de commande. vouloir ajouter cela comme une réponse? – siliconpi

Répondre

0

Comme est mentionné dans le lien:

As mentioned in the first stored procedures tutorial, we declare the "|" symbol as a delimiter, so that our function body can use ordinary ";" characters 

Vous pouvez écrire beaucoup de commandes sur différentes lignes consécutives. Mais généralement seulement quand '; 'est rencontré, l'instruction hole est exécutée.
La mise en place d'un caractère DELIMITER signifie que MySQL doit attendre jusqu'à ce qu'il soit fermé, peu importe si vous utilisez '; 'ou non et seulement ensuite d'interpréter ce qui est entre les délimiteurs.

Questions connexes