mysql分隔符错误

Bas*_*sit 13 mysql

体改.

DROP FUNCTION IF EXISTS PersonName;
DELIMITER |;

CREATE FUNCTION PersonName( personID SMALLINT )
RETURNS CHAR(20)
BEGIN
  DECLARE pname CHAR(20) DEFAULT '';
  SELECT name INTO pname FROM family WHERE ID=personID;
  RETURN pname;
END;
|
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

这个代码怎么了?我得到以下错误.

您的SQL查询中似乎有错误.下面的MySQL服务器错误输出(如果有的话)也可以帮助您诊断问题

错误:未知的标点字符串@ 102 STR:|; SQL:DROP FUNCTION如果EXISTS PersonName; #MySQL返回一个空结果集(即零行).

DELIMITER |; DELIMITER |; DELIMITER |; DELIMITER |; DELIMITER |; DELIMITER |; DELIMITER |;

SQL查询:

DELIMITER |;

MySQL说:文档#1064 - 你的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'DELIMITER |'附近使用正确的语法 在第1行

Bil*_*win 12

之后我会删除分号END.

    ...
END
|
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

重新评论,在声明新分隔符时不能使用当前分隔符.这听起来令人困惑,但考虑一下你是否这样做:

DELIMITER |;
Run Code Online (Sandbox Code Playgroud)

现在MySQL认为分隔符是"|;" (两个字符,一个管道和一个分号).如果你考虑一下,MySQL客户端DELIMITER 必须以特殊的方式对待它.这是当前分隔符无法遵循的唯一语句.

因此,在将分隔符设置为管道时,请执行以下操作:

DELIMITER |
Run Code Online (Sandbox Code Playgroud)

将其设置回分号时,请执行以下操作:

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

FWIW,我在MySQL 5.0.75上的本地测试数据库上运行以下命令没有错误:

DROP FUNCTION IF EXISTS PersonName;
DELIMITER |

CREATE FUNCTION PersonName( personID SMALLINT )
RETURNS CHAR(20)
BEGIN
  DECLARE pname CHAR(20) DEFAULT '';
  SELECT name INTO pname FROM family WHERE ID=personID;
  RETURN pname;
END
|
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)


Bab*_*bak 5

尝试这个:

DROP FUNCTION IF EXISTS PersonName;
DELIMITER |

CREATE FUNCTION PersonName( personID SMALLINT )
RETURNS CHAR(20)
BEGIN
  DECLARE pname CHAR(20) DEFAULT '';
  SELECT name INTO pname FROM family WHERE ID=personID;
  RETURN pname;
END;
|
DELIMITER ; /* <-- add a space between DELIMITER and the semicolon */
Run Code Online (Sandbox Code Playgroud)