2010-06-15 12 views
0

Cela fonctionne sur MySQL 5.0.41, mais sur 5.1.31, il est simplement écrit "failed to create function". je tape ceci dans la console:MySQL: impossible de créer la fonction {functionName}

delimiter | 
<press enter> 
CREATE DEFINER=`root`@`localhost` FUNCTION `ucwords`(str VARCHAR(128)) RETURNS varchar(128) CHARSET utf8 
BEGIN 
    DECLARE c CHAR(1); 
    DECLARE s VARCHAR(128); 
    DECLARE i INT DEFAULT 1; 
    DECLARE bool INT DEFAULT 1; 
    DECLARE punct CHAR(17) DEFAULT '()[]{},[email protected];:?/'; 
    SET s = LCASE(str); 
    WHILE i < LENGTH(str) DO 
    BEGIN 
     SET c = SUBSTRING(s, i, 1); 
     IF LOCATE(c, punct) > 0 THEN 
     SET bool = 1; 
     ELSEIF bool=1 THEN 
     BEGIN 
      IF c >= 'a' AND c <= 'z' THEN 
      BEGIN 
       SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1)); 
       SET bool = 0; 
      END; 
      ELSEIF c >= '0' AND c <= '9' THEN 
      SET bool = 0; 
      END IF; 
     END; 
     END IF; 
     SET i = i+1; 
    END; 
    END WHILE; 
    RETURN s; 
END | 
<press enter> 

J'ai même essayé de minimiser à tout:

delimiter | 
<press enter> 
CREATE DEFINER=`root`@`localhost` FUNCTION `ucwords`(str VARCHAR(128)) RETURNS varchar(128) CHARSET utf8 
BEGIN 
    DECLARE s VARCHAR(128); 
    RETURN s; 
END | 
<press enter> 

J'ai même essayé sans définisseur, juste en utilisant:

delimiter | 
<press enter> 
CREATE FUNCTION `ucwords`(str VARCHAR(128)) RETURNS varchar(128) CHARSET utf8 
BEGIN 
    DECLARE s VARCHAR(128); 
    RETURN s; 
END | 
<press enter> 

Répondre

0

Avez-vous récemment effectué une mise à niveau de MySQL 5.0 vers la version 5.1? Si c'est le cas, vous devez exécuter le script mysql_upgrade pour mettre à jour les tables système. Dans ce cas, le schéma de la table mysql.proc a changé, ce qui pourrait expliquer votre problème: http://dev.mysql.com/doc/refman/5.1/en/mysql-upgrade.html

Plus d'informations sur la mise à niveau à 5.1: http://dev.mysql.com/doc/refman/5.1/en/upgrading-from-previous-series.html

+0

Non, il est juste que je me déplace l'application d'un serveur (en cours d'exécution 5.0.41) à un autre (fonctionnant en 5.1.31), et cela ne fonctionne pas sur le nouveau, que je ne peux pas et ne veux pas rétrograder. –