我有一個存儲過程,它插入一個實體并返回其新的 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 關注
- 133 瀏覽
添加回答
舉報
0/150
提交
取消