[英]Mysql function doesnt work
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行的''附近使用的正確語法>
錯誤在哪里..原因是我剛開始在mysql中創建函數。
更新:
它指出這些行之間帶有一些舍入的問號的錯誤:
ELSE IF n <15 THEN RETURN LEFT( s, n ) ;
ELSE IF CHAR_LENGTH( s ) <= n THEN RETURN s;
順便說一句,我用phpmyadmin
mysql版本是:mysqlnd 5.0.10
您需要刪除一個額外的END IF
,然后用ELSEIF
替換ELSE IF
:
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$$
德米特里(Dmitry)遇到的最后一個錯誤是由於使用了多余的分號:
WRONG code: delimiter $$;
GOOD code: delimiter $$
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$$
我不確定bt,我不明白為什么您要兩次( END IF;
)關閉。 這可能是您的代碼中可能的問題。 請檢查它。ELSE 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;
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$$
嘗試在您的聲明中再添加一個END IF,這應該可以:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.