Mysql函数不起作用

时间:2012-08-24 15:21:01

标签: mysql

DROP FUNCTION IF EXISTS shorten;
delimiter $$
CREATE FUNCTION shorten(s VARCHAR(255), n INT)
   RETURNS VARCHAR(255)
 BEGIN
 IF ISNULL(s) THEN
   RETURN '';
 ELSE IF n<15 THEN
    RETURN LEFT(s, n);
 ELSE IF CHAR_LENGTH(s) <= n THEN
   RETURN s;
 ELSE
  RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
  END IF;
 END$$

我得到的信息是:

  

#1064 - 您的SQL语法出错;检查   手册,对应右边的MySQL服务器版本   在第14行''附近使用的语法   &GT;

错误在哪里。因为我是在mysql中创建函数的新手。

更新:

它指出这些行之间有一些圆角问号的错误:

ELSE IF n <15 THEN RETURN LEFT( s, n ) ;

ELSE IF CHAR_LENGTH( s ) <= n THEN RETURN s;

BTW,我使用phpmyadmin

mysql版本是:mysqlnd 5.0.10

4 个答案:

答案 0 :(得分:3)

您需要删除额外的END IF,并将ELSE IF替换为ELSEIF

DROP FUNCTION IF EXISTS shorten;
delimiter $$
CREATE FUNCTION shorten(s VARCHAR(255), n INT) RETURNS VARCHAR(255)
BEGIN
 IF ISNULL(s) THEN
  RETURN '';
 ELSEIF n<15 THEN
  RETURN LEFT(s, n);
 ELSEIF CHAR_LENGTH(s) <= n THEN
  RETURN s;
 ELSE
  RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
 END IF;
END$$

德米特里的最后一个错误是因为一个额外的分号:

WRONG code: delimiter $$; 
GOOD code: delimiter $$

答案 1 :(得分:1)

IF THEN ELSE的真正MySQL语法是

   IF THEN
   ELSEIF THEN
   ELSE
   END IF

实际上,您使用ELSE IF代替ELSEIF替换它,它会起作用

参考:http://dev.mysql.com/doc/refman/5.0/en/if.html

DROP FUNCTION IF EXISTS shorten;

delimiter $$
CREATE FUNCTION shorten(s VARCHAR(255), n INT)
RETURNS VARCHAR(255)
 BEGIN
 IF ISNULL(s) THEN
 RETURN '';
 ELSEIF n<15 THEN
RETURN LEFT(s, n);
 ELSEIF CHAR_LENGTH(s) <= n THEN
 RETURN s;
 ELSE
 RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
  END IF;

 END$$

答案 2 :(得分:1)

我不确定我不明白为什么你关闭if(END IF;)两次..? 这可能是您的代码中可能存在的问题。请检查一下。ELSE IF应该没有空格,ELSEIF。 代码应该是:

DROP FUNCTION IF EXISTS shorten;
delimiter $$
CREATE FUNCTION shorten(s VARCHAR(255), n INT)
RETURNS VARCHAR(255)
 BEGIN
 IF ISNULL(s) THEN
 RETURN '';
 ELSEIF n<15 THEN
RETURN LEFT(s, n);
 ELSEIF CHAR_LENGTH(s) <= n THEN
 RETURN s;
 ELSE
 RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
  END IF;
 END;$$
 delimiter;

答案 3 :(得分:1)

CREATE  FUNCTION shorten(s VARCHAR(255), n INT)
RETURNS VARCHAR(255)
BEGIN
IF ISNULL(s) THEN 
RETURN '';
ELSEIF n<15 THEN
RETURN LEFT(s,n);
ELSE 
IF CHAR_LENGTH(s) <= n THEN
RETURN s;
ELSE
RETURN CONCAT(LEFT(s, n-10), '... ',RIGHT(s,5));
END IF;
END IF;
END$$ 

尝试在ur语句中再包含一个END IF,这应该有效:)