V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
leonidas
V2EX  ›  问与答

请教个 GO 调用 MySQL 存储过程的问题

  •  
  •   leonidas · 2021-12-13 13:08:54 +08:00 · 1122 次点击
    这是一个创建于 1077 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题如下: 现有个存储过程如下(只是随便举个例子):

    CREATE PROCEDURE test(
    	UID INT,
    	OUT Ret1 VARCHAR(200),
    	OUT Ret2 VARCHAR(200),
    )
    BEGIN
    	SET Ret1 = "test ret1";
    	SET Ret2 = "test ret2";
    	
    	SELECT * FROM user;
    	SELECT * FROM phones;
    END
    

    GO 里如何调佣这个存储过程获取 Ret1 、Ret2 出参,及获取 user 、phones 的两个结果集呢

    翻遍了度娘和谷哥没找到想要的答案,求助 V 友

    4 条回复    2021-12-13 20:23:03 +08:00
    wd
        1
    wd  
       2021-12-13 13:21:16 +08:00 via iPhone
    按说 procedure 应该是需要类似函数那样显式声明 输入和输出的吧?就是输入应该在定义里面,输出是通过 return 之类。我感觉你举的栗子就没有输入输出,你无法获取
    gamexg
        2
    gamexg  
       2021-12-13 13:46:31 +08:00
    ```

    package main

    import (
    "database/sql"

    "fmt"

    _ "github.com/denisenkom/go-mssqldb"
    _ "github.com/go-sql-driver/mysql"
    )

    func main() {
    db, err := sql.Open("mssql", `server=1.2.3.4;user id=test;password=test;encrypt=disable;database=test`)
    if err != nil {
    panic(err)
    }

    if err := db.Ping(); err != nil {
    panic(err)
    }

    tx, err := db.Begin()

    row := tx.QueryRow(`DECLARE @o_id int

    EXEC [dbo].[AAAAAAA]
    @serverid = ?,
    @o_id = @o_id OUTPUT;

    SELECT @o_id as N'@o_id' `, 99)

    id := 0
    if err := row.Scan(&id); err != nil {
    panic(err)
    }

    fmt.Print(id)

    if err := tx.Commit(); err != nil {
    panic(err)
    }

    /*
    id, err := result.LastInsertId()
    if err != nil {
    panic(err)
    }*/
    return

    }

    ```
    leonidas
        3
    leonidas  
    OP
       2021-12-13 20:13:27 +08:00
    @wd OUT 关键字就是定义出参的 下面的 SELECT 查询语句是查询结果集
    leonidas
        4
    leonidas  
    OP
       2021-12-13 20:23:03 +08:00
    @gamexg 我用 mysql 跑的好像不行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6061 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.