2010-08-04 9 views
5

Sto usando MySQL v5.1.36 e sto provando a creare una funzione memorizzata usando questo codice.Errori con la creazione di una funzione memorizzata MySQL ERRORE 1064 e 1327

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// 

Inserito nella console MySQL ottengo questa risposta.

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// 

Da quello che posso trovare online la mia sintassi è corretta. Che cosa sto facendo di sbagliato?

risposta

6

Ho risolto i miei problemi aggiungendo `` attorno alle mie variabili. Ecco il codice con cui ho finito.

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

Quando si crea una funzione/procedura dalla console mysql, il primo comando dovrebbe essere DELIMITER //. In caso contrario, utilizza il delimitatore predefinito (;),

+0

Ah, l'ho perso quando ho estratto le informazioni dalla console. Lo aggiusterò nella domanda. –

Problemi correlati