0

尝试在 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 子句是正确的——什么会导致这样的错误?

4

2 回答 2

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演示。

于 2013-06-09T09:12:46.377 回答
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
于 2013-06-09T08:54:56.600 回答