一尘不染

mysql分隔符错误

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 ;

此代码有什么问题?我得到以下错误。

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

错误:未知的标点字符串@ 102 STR:|; SQL:如果存在PersonName,则执行DROP功能;#MySQL返回空结果集(即零行)。

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

SQL查询:

DELIMITER |;

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


阅读 272

收藏
2020-05-17

共1个答案

一尘不染

之后我要删除分号END

    ...
END
|
DELIMITER ;

请发表评论,在声明新的定界符时不能使用当前的定界符。这听起来令人困惑,但是请考虑是否要执行以下操作:

DELIMITER |;

现在,MySQL会认为分隔符为“ |;”。(两个字符,一个竖线和一个分号)。如果考虑到这一点,DELIMITER 必须
由MySQL客户端以特殊方式对待。这是当前定界符 不能 遵循的唯一语句。

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

DELIMITER |

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

DELIMITER ;

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 ;
2020-05-17