亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法使用 Go MySQL 檢索輸出參數

無法使用 Go MySQL 檢索輸出參數

Go
長風秋雁 2023-07-17 09:52:59
我有一個存儲過程,它插入一個實體并返回其新的 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()。


查看完整回答
反對 回復 2023-07-17
?
慕絲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)

請注意,此方法也適用于多列和多行。


查看完整回答
反對 回復 2023-07-17
  • 2 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號