Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于虚拟机的mysql存储函数语法_Mysql - Fatal编程技术网

用于虚拟机的mysql存储函数语法

用于虚拟机的mysql存储函数语法,mysql,Mysql,我现在似乎患了严重的脑胀气。有人能看到下面的mysql存储函数中非常明显的错误吗 delimiter $$ drop function if exists test$$ create function test() returns boolean begin return true; end$$ 我知道它在这个地方跳舞,笑得前仰后合,朝我的方向挥舞着裸露的臀部——但我就是看不见它 最初的错误是在一个大得多的代码块中,我将其缩减到上面的部分,但是如果没有要删除的代码,我似乎无法删

我现在似乎患了严重的脑胀气。有人能看到下面的mysql存储函数中非常明显的错误吗

delimiter $$

drop function if exists test$$ 

create function test() 
returns boolean
begin
    return true;
end$$
我知道它在这个地方跳舞,笑得前仰后合,朝我的方向挥舞着裸露的臀部——但我就是看不见它

最初的错误是在一个大得多的代码块中,我将其缩减到上面的部分,但是如果没有要删除的代码,我似乎无法删除更多的代码。
mysql版本5.7.14

在设置新分隔符之前,请先删除该函数

DROP function IF EXISTS `test`;

DELIMITER $$
USE `A_DB`$$
CREATE FUNCTION `test` ()
RETURNS BOOLEAN
BEGIN
    RETURN TRUE;
END$$

DELIMITER ;

在设置新分隔符之前删除函数

DROP function IF EXISTS `test`;

DELIMITER $$
USE `A_DB`$$
CREATE FUNCTION `test` ()
RETURNS BOOLEAN
BEGIN
    RETURN TRUE;
END$$

DELIMITER ;

对于再次走到这一步的人来说,问题不在于SQL。问题在于驱动程序和我对mysql的理解

delimiter语句是MySQL客户端(命令行)的一部分,不是任何驱动程序(或者至少是我能找到的任何节点上的驱动程序)的一部分

所以,如果您是通过吸入字符串并通过驱动程序(在我的例子中是nodejs mariasql)将其喷射到数据库中来加载sql,那么分隔符是不可理解的


您要么自己解析分隔符,要么更详细地登录mysql客户端外壳并加载文件。我可能会简单地放一行,比如%start-sql-stuff-here%end,然后将sql解析成块,然后将这些块喷到驱动程序上。

对于再次这样做的人,问题不在于sql。问题在于驱动程序和我对mysql的理解

delimiter语句是MySQL客户端(命令行)的一部分,不是任何驱动程序(或者至少是我能找到的任何节点上的驱动程序)的一部分

所以,如果您是通过吸入字符串并通过驱动程序(在我的例子中是nodejs mariasql)将其喷射到数据库中来加载sql,那么分隔符是不可理解的


您要么自己解析分隔符,要么更详细地登录mysql客户端外壳并加载文件。我可能会简单地在这里放一行,比如%start sql stuff%end,然后将sql解析成块,然后将它们喷射到驱动程序中。

我在这方面尝试了您的版本,但失败了“您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第3行的“DELIMITER$$use
A_DB
$$CREATE FUNCTION
test
()返回布尔值BEGIN RE”附近使用的正确语法“我设法使这个版本通过了我机器上的mysql命令行,但从文件加载时仍然失败。事实上,这个问题似乎是最后的定界符。错误代码的重复运行使分隔符处于$$状态,导致下一次运行代码失败(至少在使用命令行时)。请尝试另一个分隔符,
$$
如果在双引号字符串中使用,可能会使PHP混淆我在这方面尝试了您的版本,但失败的原因是“您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第3行的“DELIMITER$$use
A_DB
$$CREATE FUNCTION
test
()返回布尔值BEGIN RE”附近使用的正确语法“我设法使这个版本通过了我机器上的mysql命令行,但从文件加载时仍然失败。事实上,这个问题似乎是最后的定界符。错误代码的重复运行使分隔符处于$$状态,导致下一次代码运行失败(至少在使用命令行时)。请尝试另一个分隔符,
$$
如果在双引号字符串中使用,可能会使PHP混淆是,
DELIMITER
是一个客户端解析器指令,由
mysql
命令行界面(CLI)使用,并由othet客户端模拟。标准分隔符
。客户端不断读取输入,直到看到
然后将整个查询整体发送到服务器执行。带有
开始
/
结束
的复杂语句包括嵌入的
,因此除非有办法更改被监视的
指向其他内容<代码>分隔符
更改CLI查找的内容。在对不同问题的回答中也提到了上下文。还要注意,这不是“驱动程序”的函数。它是使用驱动程序的东西的函数—您的代码—因为驱动程序执行语句,虽然您的代码是一个实体,它从可用的上下文中决定什么实际上构成了一条SQL语句,但我最终就是这么做的。在文件中使用我自己的分隔符-加载文件-在分隔符上拆分为字符串-删除控制字符-修剪尾随和前导空格并将其喷射到驱动程序。是的,
DELIMITER
是由
mysql
命令行界面(CLI)使用的客户端解析器指令,由Othert客户端模拟。标准分隔符
。客户端不断读取输入,直到看到
然后将整个查询整体发送到服务器执行。带有
开始
/
结束
的复杂语句包括嵌入的
,因此除非有办法更改被监视的
指向其他内容<代码>分隔符
更改CLI查找的内容。在对不同问题的回答中也提到了上下文。还要注意,这不是“驱动程序”的函数。它是使用驱动程序的东西的函数—您的代码—因为驱动程序执行语句,虽然您的代码是一个实体,它从可用的上下文中决定什么实际上构成了一条SQL语句