无法使用 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 片段会出现如此大的问题。有人有什么见解吗?


长风秋雁
浏览 99回答 2
2回答

UYOU

您不能在一次调用中运行多个语句db.Query()。所有编程语言中的大多数查询接口都是如此。在一次调用中调用您的存储过程db.Query(),然后select @newargumentid在第二次调用中进行查询db.Query()。

慕丝7291255

我可以确认它在 Go1.14 中不起作用。我的解决方法是通过在最后进行选择来重写我的存储过程以“返回”值:CREATE PROCEDURE foo()BEGIN    # do stuff...    SELECT 'bar';END;然后在 Go 中像任何其他查询一样读取它:res, _ := db.Query("CALL foo()")res.Next()var bar stringres.Scan(&bar)println(bar)请注意,此方法也适用于多列和多行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go