2010-08-04 18 views
5

MySQL v5.1.36 kullanıyorum ve bu kodu kullanarak depolanmış bir işlev oluşturmaya çalışıyorum.MySQL depolanmış işlev oluşturma ile ilgili hatalar ERROR 1064 & 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// 

MySQL Konsolu'na girildiğinde, bu yanıtı alıyorum.

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

Çevrimiçi bulabildiğim yerlerden söz dizimi doğru. Neyi yanlış yapıyorum?

cevap

6

Sorunlarımı `` değişkenlerimi ekleyerek çözdüm. İşte bittiğim kod.

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

MySQL konsolundan bir işlevi/yordam oluşturmak, ilk komut DELIMITER // olmalıdır. Aksi takdirde, varsayılan sınırlayıcıyı (;),

+0

Ah kullanır, bu bilgileri konsoldan çıkardığımda özledim. Bunu düzelteceğim. –

İlgili konular