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 ;

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

There seems to be an error in your SQL query. The MySQL server error output below, if there is any, may also help you in diagnosing the problem

错误:未知的标点符号字符串@ 102 字符串:|; SQL:如果删除函数 EXISTS PersonName;# MySQL 返回一个 空结果集(即零行)。

分隔符 |;分隔符 |;分隔符 |; 分隔符 |;分隔符 |;分隔符 |; 分隔符 |;

SQL查询:

分隔符 |;

MySQL 说:文档 #1064 - 您的 SQL 语法有误;检查手册 对应你的MySQL服务器 使用正确语法的版本 在“DELIMITER |”附近在第 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 ;

关于mysql分隔符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267172/

相关文章:

python - SQLalchemy Core,检索更新行的 ID

php - 如何使用JOIN从两个表中获取数据

php - 存储 javascript 复选框(选中/未选中)导致 php mysql 错误

php - 用 PHP 编写数据库的属性

java - 使用显示错误的 hibernate 更新 mysql 表

mysql - 使用加载数据添加值

php - 复选框并从数据库设置其默认选中值

mysql - SQL 缺少记录问题

php - PDO 对象 :could not find driver

php - Mysql子日期查询: retrieve records from yesterday/last week/etc