无法构建MySQL函数,获得错误1064

时间:2013-06-28 15:49:02

标签: mysql sql stored-procedures stored-functions

我刚开始尝试使用MySQL函数,在尝试构建下面的函数时出现错误。

-> DELIMITER //
-> CREATE FUNCTION addD(d VARCHAR(20), rt VARCHAR(40), a VARCHAR(5), de VARCHAR(35))                                                                                        
-> RETURNS VARCHAR(20)
-> BEGIN
->     DECLARE ret VARCHAR(20);
->     IF (SELECT count(DN) FROM DB.TABLE WHERE DN = d) > 0 THEN ret=concat(s,' - exists!');
->     ELSE ret = 'clear';
->     IF ret = 'clear' THEN (INSERT INTO DB.TABLE (DN,ROUTE,ACTIVE,Description) VALUES (dn,rt,a,de));
->     RETURN ret;
-> END //

我得到的错误是:

  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'= CONCAT(dn,' - exists!')附近使用的语法; ELSE ret ='clear';   IF ret ='clear'THEN(IN'在第1行

任何帮助都会很棒。请小姐,因为我不熟悉MySQL函数。

1 个答案:

答案 0 :(得分:2)

您的IF语法不正确,您需要使用SETSELECT为变量分配值。

DELIMITER //
CREATE FUNCTION addD(d VARCHAR(20), rt VARCHAR(40), a VARCHAR(5), de VARCHAR(35))                                                                                        
RETURNS VARCHAR(20)
BEGIN
    DECLARE ret VARCHAR(20);

    IF (SELECT count(DN) FROM DB.TABLE WHERE DN = d) > 0 THEN 
        SET ret = CONCAT(s,' - exists!');
    ELSE 
        SET ret = 'clear';
    END IF;

    IF ret = 'clear' THEN 
        INSERT INTO DB.TABLE (DN,ROUTE,ACTIVE,Description) VALUES (dn,rt,a,de);
    END IF;

    RETURN ret;
END //

注意在声明中

SET ret = CONCAT(s,' - exists!');
                 ^

您正在尝试与不存在的变量s连接;

此外,它看起来像是存储过程的作业,而不是存储的函数。