CREATE FUNCTION 引发 SQL 错误 (1064) (42000)

Posted

技术标签:

【中文标题】CREATE FUNCTION 引发 SQL 错误 (1064) (42000)【英文标题】:CREATE FUNCTION throws SQL Error (1064) (42000) 【发布时间】:2021-02-18 15:08:47 【问题描述】:

我正在尝试在 MariaDB 数据库中创建一个存储函数。 我从MariaDB Docs复制了我试图创建的函数:

DELIMITER //

CREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC
BEGIN
  DECLARE x TINYINT;
  SET x = 42;
  RETURN x;
END 

//

DELIMITER ;

很遗憾,我收到以下错误:

SQL 错误 [1064] [42000]:您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以了解在第 3 行的 '' 附近使用的正确语法

最让我困惑的是,给定的代码应该可以解决我根据 MariaDB 文档得到的错误代码

解决方案是使用 DELIMITER 命令为进程的持续时间指定一个不同的分隔符

【问题讨论】:

你说你运行的对我有用,只是检查一下,你运行的是什么版本的 mariaDB 你是如何发出命令的,phpMyAdmin还是命令行(mysql.exe) @RiggsFolly 我正在运行版本 10.3.27-MariaDB 并使用 Dbeaver 发出命令 @RiggsFolly 感谢您提出关于我如何发出命令的聪明问题。我什至没有想过这是否会有所作为。但是,该命令在 MySql Workbench 中按预期工作。所以谢谢! 是的,WorkBench 可能选择了数据库。 【参考方案1】:

事实证明,我用来发出命令的客户端 DBeaver 造成了问题。 切换到 MySqlWorkbench 后,一切都按预期工作。

显然,DBeaver 没有正确识别分隔符..

【讨论】:

【参考方案2】:

我认为您可能忘记选择要存储此例程的数据库。

所以尝试添加use 作为第一行

use `test`;

DELIMITER //

CREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC
BEGIN
  DECLARE x TINYINT;
  SET x = 42;
  RETURN x;
END
//

DELIMITER ;

【讨论】:

以上是关于CREATE FUNCTION 引发 SQL 错误 (1064) (42000)的主要内容,如果未能解决你的问题,请参考以下文章

CREATE TABLE IF NOT EXISTS 在 UCanAccess 中引发错误

Caused by: java.sql.SQLSyntaxErrorException: Unknown column ‘status‘ in ‘field list‘-一个空格引发的惨案

我可以从 rxSwift map-Function 引发错误吗

CREATE FUNCTION IN SQL select into

AWS CloudTrail Create API for Go SDK 引发错误消息“InsufficientS3BucketPolicyException:检测到存储桶的 S3 存储桶策略不正确:

SQL更新查询引发语法错误[关闭]