我在使用 golang 返回過(guò)程時(shí)遇到問(wèn)題。如果我從過(guò)程中刪除參數(shù),過(guò)程將正常執(zhí)行,但是,當(dāng)我需要獲取返回值(OUT 參數(shù))時(shí),我無(wú)法獲取它并且過(guò)程不會(huì)執(zhí)行。為了使測(cè)試更簡(jiǎn)單并獲得幫助,我創(chuàng)建了一個(gè)簡(jiǎn)單的過(guò)程,如下所示,我想得到它的回報(bào)。請(qǐng)遵循以下程序:drop procedure if exists PESSOA_TESTE;delimiter $$create procedure PESSOA_TESTE(out psaida int)beginset psaida = 2;end$$現(xiàn)在它遵循我用來(lái)嘗試獲取過(guò)程中指定的值 2 的 golang 代碼部分。var GerenciaBD GERENCIABDvar PontoExecucao intGerenciaBD.F_GERENCIABD_ABRIR_CONEXAO_MYSQL()GerenciaBD.DataBase.ExecContext(context.TODO(),"call PESSOA_TESTE", sql.Named("psaida", sql.Out{Dest:&PontoExecucao}))println(PontoExecucao)執(zhí)行時(shí)我的答案是 0 而不是 2,這是過(guò)程中指定的答案。我的 golang 版本是 1.10。
1 回答
慕桂英4014372
TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
我不確定你想用你的代碼做什么,但如果你只想返回一個(gè)值,你可以這樣做:
存儲(chǔ)過(guò)程:
drop procedure if exists PESSOA_TESTE;
delimiter $$
create procedure PESSOA_TESTE(IN psaida int)
begin
SET psaida = 2;
select psaida;
end
$$
代碼:
? ?var GerenciaBD GERENCIABD
? ? var PontoExecucao int
? ? GerenciaBD.F_GERENCIABD_ABRIR_CONEXAO_MYSQL()
? ? GerenciaBD.DataBase.QueryRowContext(context.TODO(),"CALL PESSOA_TESTE(?)", PontoExecucao).Scan(&PontoExecucao)
? ? println(PontoExecucao)
- 1 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
