MySQL错误1064 - '定义函数'语法

问题描述:

我几乎没有学习MySQL(从SQLite移动)。我正在尝试在MySQL命令行客户端中创建一个自定义函数,但遇到了无法更正的错误 - 并且找不到在线答案。我的第一个函数开始,因为这:MySQL错误1064 - '定义函数'语法

CREATE FUNCTION myDatabase.LCASE_ASCII_VALUE_AT(
     unparsedLine VARCHAR(1024), 
     linePos int 
    ) RETURNS int DETERMINISTIC 
    return ASCII(LCASE(RIGHT(CHAR_LENGTH(unparsedLine) - linePos + 1))); 

我得到这个错误:

ERROR 1064 (42000): 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 '))' at line 10

在哪里我的语法出了错任何指针?我怀疑这些,但他们没有解决问题:

  1. 也许MySQL不喜欢像return ASCII(LCASE(...复合语句。但即使在手动解开语句之后,我仍然得到同样的错误(但是在新解释的语句中的一行中 - 我省略了解开的语句以节省空间)。
  2. 也许DELIMITER $$ [function definition] END $$ DELIMITER ;业务是强制性的 - 但这并没有解决错误,MySQL文档给出了一个不需要DELIMITER的单行函数的例子。 ('你好'功能在https://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

编辑:添加,我在MySQL命令行客户端内创建此功能。

right要求两个参数,字符串本身和字符数。你只给了人物数量。

试试这个:

return ASCII(LCASE(RIGHT(unparsedLine, CHAR_LENGTH(unparsedLine) - linePos + 1))); 

此外,你可能会发现,substr是一个更好的选择,因为没有必要计算参数right在这种情况下,是这样的:

return ASCII(LCASE(SUBSTR(unparsedLine, linePos, 1))); 
+0

我希望我编辑这不会垃圾邮件收件箱。谢谢,你是对的。愚蠢的新手错误。 – MonkeyWithDarts