mysql - 如何删除 #1064 - mysql 中的 SQL 语法错误

标签 mysql sql database

每当我尝试运行此函数时,都会收到以下错误消息:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 10

DROP FUNCTION IF EXISTS regNum;
DELIMITER $$
CREATE FUNCTION regNum(i INT)
RETURNS CHAR(5)
 BEGIN
    RETURN CONCAT(
     CHAR(i / 26000 % 26 + 65), 
     CHAR(i / 1000 % 26 + 65), 
     CHAR(i / 100 % 10 + 48),
     CHAR(i / 10 % 10 + 48), 
     CHAR(i % 10 + 48))
 END;
 $$
 DELIMITER ;

最佳答案

; 移到 end 之后、之前。

由于您将分隔符从 ; 更改为 $$,分号不再是分隔符(在函数定义之外)。

只是一个特殊字符,数据库引擎不知道如何处理它并抛出错误。您需要将其放在 return 语句的末尾以结束函数内的语句。

DROP FUNCTION IF EXISTS regNum;
DELIMITER $$
CREATE FUNCTION regNum(i INT)
RETURNS CHAR(5)
 BEGIN
    RETURN CONCAT(
     CHAR(i / 26000 % 26 + 65), 
     CHAR(i / 1000 % 26 + 65), 
     CHAR(i / 100 % 10 + 48),
     CHAR(i / 10 % 10 + 48), 
     CHAR(i % 10 + 48));
 END
 $$
 DELIMITER ;

关于mysql - 如何删除 #1064 - mysql 中的 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964288/

相关文章:

php - 将 html 网络表单保存为草稿

mysql - 为什么 MySQL VARCHAR 允许超过最大长度?

mysql - 将每个不同值的计数作为 SQL 中的列返回

database - 设计非常大的数据库来搜索文本

php - 如何在mySQL中将Base64字符串存储为BLOB

sql - 可以删除非字母数字字符防止 SQL 注入(inject)

sql - 在SQLite中找到几个MAX值

sql - 与 self 关系的表

java - 尝试通过JDBC在MySQL中存储SecretKey、加密密码

mysql - 别名导致 where 子句出错 - MySQL