之前的golang版本,由于sql标准库不支持多结果集的返回,所以也就影响了存储过程,那时候只能调用插入和更新类的存储过程,即db.exec(“call function_name”), 从golang 1.8开始,支持多结果集, https://blog.gopheracademy.com/advent-2016/database_sql/
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"log"
"fmt"
)
func main() {
db, err := sql.Open("mysql", "root:root@/test?multiStatements=true")
if err != nil {
log.Println(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Println(err.Error())
}
rows, err := db.Query(`
select username from users limit 0, 10;
select uuid from users limit 0, 10;`)
if err != nil {
log.Print(err.Error())
}
defer rows.Close()
for rows.Next() {
name := ""
rows.Scan(&name)
fmt.Println(name)
}
if !rows.NextResultSet() {
log.Fatal("expected more result sets", rows.Err())
}
for rows.Next() {
uuid := ""
rows.Scan(&uuid)
fmt.Println(uuid)
}
rows, err = db.Query(`call id_users(?)`, 10)
if err != nil {
log.Print(err)
}
for rows.Next() {
name := ""
rows.Scan(&name)
fmt.Println(name)
}
}