2010-08-04 22 views
5

Ich benutze MySQL v5.1.36 und ich versuche, eine gespeicherte Funktion mit diesem Code zu erstellen.Fehler mit der gespeicherten Funktionserstellung von MySQL ERROR 1064 & 1327

Wenn in die MySQL-Konsole eingegeben, bekomme ich diese Antwort.

mysql> DELIMITER // 
mysql> CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RETURNS INT DETERMINISTIC 
    ->   BEGIN 
    ->   DECLARE y INT; 
ERROR 1064 (42000): 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 3 
mysql>   SELECT id INTO y 
    ->   FROM `modx`.coverage_state 
    ->   WHERE `coverage_state`.name = x; 
ERROR 1327 (42000): Undeclared variable: y 
mysql>   RETURN y; 
ERROR 1064 (42000): 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 'RETUR 
N y' at line 1 
mysql>   END// 

Von dem, was ich online finden kann, ist meine Syntax korrekt. Was mache ich falsch?

Antwort

6

Ich löste die meine Probleme durch Hinzufügen von `` um meine Variablen. Hier ist der Code, mit dem ich gelandet bin.

DELIMITER // 
CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RETURNS INT DETERMINISTIC 
    BEGIN 
    DECLARE `y` INT; 
    SELECT id INTO `y` 
    FROM `modx`.coverage_state 
    WHERE `coverage_state`.name = `x`; 
    RETURN `y`; 
    END// 
DELIMITER ; 
6

Wenn eine Funktion/Prozedur von mysql Konsole erstellen, sollte der erste Befehl DELIMITER // sein. Ansonsten verwendet es Standard-Delimiter (;),

+0

Ah, ich vermisste das, als ich die Informationen aus der Konsole packte. Ich werde das in der Frage beheben. –