我有一个存储过程,它插入一个实体并返回其新的 UUID,虽然我可以生成代码来创建正确的查询,但在使用go-sql-driver/mysql. 所以下面的代码...func test_insert() *sql.Rows { db := openDbConnection() defer db.Close() results, err := db.Query("call saveargument(null, 'Test Argument', 'Test Argument', '1', null, null, null, 1, 'test_user', @newargumentid);\nselect @newargumentid;") toolkit.HandleError(err) return results}func openDbConnection() *sql.DB { var db, err = sql.Open("mysql", getConnectionString(entities.GetConfig())) toolkit.HandleError(err) return db}...产生以下错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 2 行“select @newargumentid”附近使用的正确语法我不知道为什么这样一个基本的 SQL 片段会出现如此大的问题。有人有什么见解吗?
2 回答
UYOU
TA贡献1878条经验 获得超4个赞
您不能在一次调用中运行多个语句db.Query()
。所有编程语言中的大多数查询接口都是如此。
在一次调用中调用您的存储过程db.Query()
,然后select @newargumentid
在第二次调用中进行查询db.Query()
。
慕丝7291255
TA贡献1859条经验 获得超6个赞
我可以确认它在 Go1.14 中不起作用。我的解决方法是通过在最后进行选择来重写我的存储过程以“返回”值:
CREATE PROCEDURE foo()
BEGIN
# do stuff...
SELECT 'bar';
END;
然后在 Go 中像任何其他查询一样读取它:
res, _ := db.Query("CALL foo()")
res.Next()
var bar string
res.Scan(&bar)
println(bar)
请注意,此方法也适用于多列和多行。
- 2 回答
- 0 关注
- 97 浏览
添加回答
举报
0/150
提交
取消