尝试在PhpMyAdmin中运行以下代码时,在第5行的if子句的开头出现#1064语法错误:
DELIMITER ;
CREATE DEFINER=`root`@`localhost` FUNCTION `ANREDE`(geschlecht enum('m','w'), vorname VARCHAR(255), nachname VARCHAR(255)) RETURNS varchar(1023) CHARSET latin1
DETERMINISTIC
BEGIN
IF geschlecht = 'm' THEN RETURN CONCAT_WS('',CONCAT_WS(' ','Sehr geehrter Herr',vorname,nachname),',');
ELSE RETURN CONCAT_WS('',CONCAT_WS(' ','Sehr geehrte Frau',vorname,nachname),',');
END IF;
END
在我看来,if子句是正确的 - 什么可能导致这样的错误?
答案 0 :(得分:0)
您需要更改分隔符。目前,;
是您的分隔符,解析器将第5行末尾的;
解释为函数创建语句的结尾。
试试这个:
DELIMITER // -- change the delimiter
CREATE ...
BEGIN
IF ... ; -- this is not the end of the statement
...
END
// -- end of statement
DELIMITER ; -- useless if you issue this in PhpMyAdmin, but a good practice nevertheless
答案 1 :(得分:0)
您可以使用DELIMITER
或者您可以重写您的函数以使其成为单语句函数
CREATE FUNCTION `ANREDE`
(
geschlecht enum('m','w'),
vorname VARCHAR(255),
nachname VARCHAR(255)
)
RETURNS VARCHAR(1023) CHARSET latin1
DETERMINISTIC
RETURN CONCAT
(CONCAT_WS(' ',
IF(geschlecht = 'm',
'Sehr geehrter Herr',
'Sehr geehrte Frau'),
vorname,
nachname),
',');
这是 SQLFiddle 演示。