gpt4 book ai didi

mysql - 在 MySQL 上创建存储过程

转载 作者:行者123 更新时间:2023-12-01 19:59:16 25 4
gpt4 key购买 nike

我正在尝试运行下面的查询,该查询存储在 .sql 文件中,然后使用 ioutils.ReadFile 进行读取并在初始化时执行

CREATE TABLE IF NOT EXISTS districts
(
GeoCode integer PRIMARY KEY,
name varchar(32)
);

drop procedure if exists insert_district;

DELIMITER $$

CREATE PROCEDURE insert_district(in pgeocode int, in pname varchar(32))
BEGIN
INSERT INTO districts(geocode, name) VALUES (pgeocode, pname);
SELECT * FROM districts where geocode = pgeocode;
END$$
DELIMITER ;

我正在使用database/sql包并使用Exec运行查询

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 'drop procedure if exists insert_district;

DELIMITER $$

CREATE PROCEDURE insert' at line 7

据我所知,我的语法是正确的,并且我对其进行了测试,因此我无法弄清楚为什么无法从程序中正确运行相同的查询。

最佳答案

Go MySQL 客户端默认不支持多条 SQL 语句。您不能只向其提供一个带有 ; 分隔语句的文本文件。

参见Does a Go Mysql driver exist that supports multiple statements within a single string?有关详细信息 - 您可以使用一个选项来允许多语句。

但这仍然不支持像 DELIMITER 这样的语句,MySQL 服务器无法识别这些语句。那是mysql client command

您有两种选择:

  • 解析 .sql 文件以查找语句终止符并一次运行一个语句。
  • 使用 .sql 文件作为输入在子进程中执行 mysql 客户端。

关于mysql - 在 MySQL 上创建存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60663409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com