登录
首页 >  Golang >  Go问答

无法检索输出参数的 Go MySQL 查询

来源:stackoverflow

时间:2024-03-03 15:27:26 237浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《无法检索输出参数的 Go MySQL 查询》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我有一个存储过程,它插入一个实体并返回其新的 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 片段会出现如此大的问题。有人有什么见解吗?


解决方案


您不能在一次 db.query() 调用中运行多个语句。所有编程语言中的大多数查询接口都是如此。

在对 db.query() 的一次调用中调用您的存储过程,然后在对 db.query() 的第二次调用中查询 select @newargumentid

我刚刚测试了 @bill 的答案,我可以确认它在 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)

请注意,此方法也适用于多列和多行。

本篇关于《无法检索输出参数的 Go MySQL 查询》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>