已修改。
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行
您的SQL查询中似乎有一个错误。下面的MySQL服务器错误输出(如果有的话)也可以帮助您诊断问题
错误:未知的标点字符串@ 102 STR:|; SQL:如果存在PersonName,则执行DROP功能;#MySQL返回空结果集(即零行)。
DELIMITER |; DELIMITER |; DELIMITER |; DELIMITER |; DELIMITER |; DELIMITER |; DELIMITER |;
SQL查询:
DELIMITER |;
MySQL说:文档#1064-您的SQL语法错误;请查看与您的MySQL服务器版本相对应的手册,以在’DELIMITER |’附近使用正确的语法 在第1行
之后我要删除分号END。
END
... END | DELIMITER ;
请发表评论,在声明新的定界符时不能使用当前的定界符。这听起来令人困惑,但是请考虑是否要执行以下操作:
现在,MySQL会认为分隔符为“ |;”。(两个字符,一个竖线和一个分号)。如果考虑到这一点,DELIMITER 必须 由MySQL客户端以特殊方式对待。这是当前定界符 不能 遵循的唯一语句。
DELIMITER
因此,在将分隔符设置为管道时,请执行以下操作:
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 ;