DataGrip 和 MySql Workbench 在存储过程的有效性上有所不同
DataGrip and MySql Workbench Differ on Validness of a Stored Procedure
Datagrip 在 mysql 中说并完美地运行了以下过程,但是 mysql 命令行和 workbench 说我的 sql 中存在语法错误。这是为什么?
CREATE PROCEDURE addTag(n VARCHAR(255), d VARCHAR(255))
BEGIN
INSERT INTO Tags(name, description) VALUES
(n, d);
END;
下面是 mysql workbench 的显示方式:
下面复制了操作和错误输出。
创建过程 addTag(n VARCHAR(255), d VARCHAR(255)) BEGIN INSERT INTO Tags(name, description) VALUES (n, d)
错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 4
行的 '' 附近使用的正确语法
当您在常规 SQL 编辑器中编写查询时,我们需要一种方法将语句彼此分开。这是由所谓的定界符完成的。默认分隔符是分号(可以更改)。
MySQL 服务器也使用分号来分隔存储程序(存储过程、函数、事件等)中的语句。服务器一次只能处理一个语句,这就是为什么客户端必须将脚本拆分成单独的语句。这是通过使用提到的定界符完成的。
现在,当您编写存储程序时,客户端用于为服务器拆分语句的定界符与这些存储程序中的定界符(均为分号)相互冲突。为了避免这种情况,您可以将客户端定界符更改为未出现在您的查询中的其他内容(字符串 + 注释不算在内)。因此,在每个 (My)SQL 工具中,您都可以更改此分隔符以避免此问题。
但是,在 MySQL Workbench 中有一些帮助,即对象编辑器。对于数据库中的每种对象类型,都有一个专门用于管理该对象的对象编辑器。对于存储的 procedures/functions,有一个编辑器只允许 create procedure
或 create function
块,因此那里不需要(客户端)分隔符。
Datagrip 在 mysql 中说并完美地运行了以下过程,但是 mysql 命令行和 workbench 说我的 sql 中存在语法错误。这是为什么?
CREATE PROCEDURE addTag(n VARCHAR(255), d VARCHAR(255))
BEGIN
INSERT INTO Tags(name, description) VALUES
(n, d);
END;
下面是 mysql workbench 的显示方式:
下面复制了操作和错误输出。
创建过程 addTag(n VARCHAR(255), d VARCHAR(255)) BEGIN INSERT INTO Tags(name, description) VALUES (n, d)
错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 4
行的 '' 附近使用的正确语法当您在常规 SQL 编辑器中编写查询时,我们需要一种方法将语句彼此分开。这是由所谓的定界符完成的。默认分隔符是分号(可以更改)。
MySQL 服务器也使用分号来分隔存储程序(存储过程、函数、事件等)中的语句。服务器一次只能处理一个语句,这就是为什么客户端必须将脚本拆分成单独的语句。这是通过使用提到的定界符完成的。
现在,当您编写存储程序时,客户端用于为服务器拆分语句的定界符与这些存储程序中的定界符(均为分号)相互冲突。为了避免这种情况,您可以将客户端定界符更改为未出现在您的查询中的其他内容(字符串 + 注释不算在内)。因此,在每个 (My)SQL 工具中,您都可以更改此分隔符以避免此问题。
但是,在 MySQL Workbench 中有一些帮助,即对象编辑器。对于数据库中的每种对象类型,都有一个专门用于管理该对象的对象编辑器。对于存储的 procedures/functions,有一个编辑器只允许 create procedure
或 create function
块,因此那里不需要(客户端)分隔符。