1

我刚开始尝试 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 //

我得到的错误是:

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

任何帮助都会很棒。请温柔,因为我是 MySQL 函数的新手。

4

1 回答 1

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

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

于 2013-06-28T16:59:36.997 回答