为了账号安全,请及时绑定邮箱和手机立即绑定

在 MySQL 上创建存储过程

在 MySQL 上创建存储过程

Go
拉莫斯之舞 2022-05-23 14:59:06
我正在尝试运行下面的查询,该查询存储在一个.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据我所知,我的语法是正确的,并且我对其进行了测试,因此我无法弄清楚为什么无法从程序中正确运行相同的确切查询。
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

Go MySQL 客户端默认不支持多条 SQL 语句。你不能只给它一个带有;分隔语句的文本文件。

请参阅是否存在支持单个字符串中的多个语句的 Go Mysql 驱动程序?有关详细信息 - 您可以使用一个选项来允许多语句。

但这仍然不支持DELIMITERMySQL 服务器无法识别的语句。那是一个mysql客户端命令

您有两种选择:

  • 解析 .sql 文件以查找语句终止符并一次运行一个语句。

  • mysql使用 .sql 文件作为输入在子进程中执行客户端。


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号