这个问题在这里已经有答案了:
创建触发器前分隔符出现mysql语法错误(2个答案)
9个月前关门了。
我使用此sql查询生成一个过程:
DELIMITER //
DROP PROCEDURE IF EXISTS GetSessionID //
CREATE PROCEDURE GetSessionID(IN token VARCHAR(64), OUT id INTEGER)
BEGIN
SELECT s.ID INTO id FROM Sessions AS s WHERE s.Token = token;
END //
DELIMITER ;
我收到以下错误消息:
Error 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 'DELIMITER //
DROP PROCEDURE IF EXISTS GetSessionID //
CREATE PROCEDURE "GetSessi' at line 1
我也试过用 $$
作为分隔符,用双引号括住过程名称,并删除 DROP
声明和 END
声明。如果我查看引用,在过程名称后面有一个空格-我也尝试过添加它,但仍然不起作用。
我用的是围棋 db.Exec
方法来执行查询,以便一个接一个地创建表和过程。
我不明白为什么会出现这个错误,因为语法看起来是正确的。在goland的sql runner中也工作过,但在go中不工作。
2条答案
按热度按时间zlwx9yxi1#
我发现了问题所在:mysql go驱动程序
database/sql
我使用的图书馆,go-sql-driver
默认情况下不支持多语句。它们可以像这里一样被激活,尽管这里有一些限制。总之,这个问题与框架有关。我希望其他在围棋中遇到同样问题的人会发现这一点很有用,因为乍一看并不是那么明显。另请参见堆栈溢出问题
编辑:编辑
DELIMITER
语句不受服务器本身的支持,但受mysql命令行的支持。即使只是一句话也不行。sqserrrh2#
请尝试下面的代码段。
DROP PROCEDURE
语句需要以结尾';
'. 一个小的修正是需要与表alias
.