如何使用MyBatis从SQL Server存储过程返回OUT参数

时间:2018-08-29 20:42:23

标签: sql-server mybatis

我有一个存储过程,其中OUT参数正常工作:

CREATE PROCEDURE sp_actualizaConfigNotif   
    (@rut VARCHAR(9),   
     @Xml_Lista XML,
     @registrosAfectados INT OUTPUT)
AS   
BEGIN --Inicio SP

SET @registrosAfectados = 0;

--Inicio Cursor
declare @idEvento int,
        @indActivo int,
        @idMedioEnvio int

declare config_cursor cursor for
        select
T.C.value('id_Evento[1]','nvarchar(255)') as idEventoParam,
T.C.value('ind_Activo[1]','nvarchar(255)') as indActivoParam,
T.C.value('id_MedioEnvio[1]','nvarchar(255)') as idMedioEnvioParam
from
@Xml_Lista.nodes('/Xml_ListaConfig/evento') T(C)

open config_cursor

fetch next from config_cursor into @idEvento, @indActivo, @idMedioEnvio

WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE EM 
    SET EM.Estatus = @indActivo
    FROM RELEvento_Medios AS EM 
    JOIN RELEvento_Cliente EC ON EC.id_Evento = EM.id_Evento 
    JOIN MSTCliente CL ON CL.id_Cliente = EC.id_Cliente 
    AND CL.Rut = @rut 
    AND EM.id_Evento =  @idEvento
    AND EM.id_MedioEnvio = @idMedioEnvio

    SET @registrosAfectados = @registrosAfectados+@@ROWCOUNT;

  FETCH NEXT FROM config_cursor INTO @idEvento, @indActivo, @idMedioEnvio

END

CLOSE config_cursor
DEALLOCATE  config_cursor
--Fin Cursor 

END; --Fin SP

EXEC  dbo.sp_actualizaConfigNotif @rut = '174021821', @Xml_Lista = @parametroXml,@registrosAfectados = @returnvalue OUT;
SELECT @returnvalue;

这将返回OUT参数。

现在我正尝试对MyBatis做同样的事情:

<insert  id="actualizaConfigNotif" parameterType="cl.itau.motor.dto.entrada.ActualizaConfigNotifDTO">
        {call sp_actualizaConfigNotif(#{rut,javaType=String,jdbcType=VARCHAR,mode=IN},#{xml_lista,javaType=String,mode=IN},#{registros,javaType=Long,jdbcType=INTEGER ,mode=OUT})}
    </insert >

阅读大量指南,我认为必须使用“ mode = OUT”指定OUT参数,但是当我对其进行测试时,会出现此错误:

org.springframework.jdbc.UncategorizedSQLException: 
### Error updating database.  Cause: com.microsoft.sqlserver.jdbc.SQLServerException: El valor no está configurado para el número de parámetro 3.
### The error may involve cl.itau.motor.dao.NotificacionDAO.actualizaConfigNotif-Inline
### The error occurred while setting parameters
### SQL: {call sp_actualizaConfigNotif(?,?,?)}
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: El valor no está configurado para el número de parámetro 3.
; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; El valor no está configurado para el número de parámetro 3.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: El valor no está configurado para el número de parámetro 3

那么,用batis返回OUT参数的正确方法是什么?

版本:

  • JAVA 8
  • SQL Server 2014
  • MyBatis 3.2.1

0 个答案:

没有答案