Java - Procedimiento Almacenado en Java no se ejecuta correctamente

 
Vista:
sin imagen de perfil

Procedimiento Almacenado en Java no se ejecuta correctamente

Publicado por Ismael (1 intervención) el 16/08/2021 23:37:11
Hola comunidad, solicito de su ayuda que estoy teniendo problemas con la ejecución de un procedimiento almacenado en Java. Resulta que el mismo procedimiento con los mismos parámetros de entrada se me ejecuta correctamente desde SQL pero ejecutándolo desde java como que no lee todas sus instrucciones y me deja la bd en un estado de inconsistencia ya que me deshabilita los triggers de las tablas.

Este es mi codigo Java:

public static void execProcedimientoAlm() {
Connection connect = cnx; //cnx es Variable privada de la clase con los parametros de la Conexion
try {
CallableStatement cs = connect.prepareCall("{call dbo.Traspaso_historial_CC( ?,?,?)}");
cs.setString(1, "312001");
cs.setString(2, "312999");
cs.setInt(3, 1);
cs.execute();
}
catch (Exception e) {
System.out.println("Error: "+e.getMessage());
}

}



Este es mi procedimiento almacenado:
CREATE PROCEDURE Traspaso_historial_CC (@clave_cc_old VARCHAR(30) = NULL, @clave_cc_new VARCHAR(30) = NULL, @reconstruir BIT = 0 )
WITH ENCRYPTION AS
BEGIN
SET NOCOUNT OFF
DECLARE @nombret NVARCHAR(MAX), @nombrec NVARCHAR(MAX)
DECLARE @table_name NVARCHAR(MAX), @column_name NVARCHAR(MAX)
DECLARE @idccostonew INTEGER, @idcostoold INTEGER
DECLARE @tsql NVARCHAR(MAX)

SET @idccostonew = 0
SET @idcostoold = 0

SELECT @idccostonew=isnull(idcentro,0) FROM cos_centro WHERE clave = @clave_cc_new
SELECT @idcostoold=isnull(idcentro,0) FROM cos_centro WHERE clave = @clave_cc_old

IF @idccostonew = 0
RAISERROR(N'Error',16,2)
ELSE IF @idcostoold = 0
RAISERROR(N'Error',16,2)
ELSE
BEGIN
exec sp_MSforeachtable 'Alter Table ? Disable Trigger all'
DECLARE Tablas_a_actualizar CURSOR FOR
SELECT t.name AS Nombres_tablas , c.name as Nombre_columnas
FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id
WHERE LOWER(c.name) LIKE '%idcentro%' OR
LOWER(c.name) LIKE '%ccosto%'
ORDER BY t.name DESC
SET NOCOUNT ON
OPEN Tablas_a_actualizar
FETCH Tablas_a_actualizar INTO @table_name, @column_name
WHILE(@@FETCH_STATUS = 0)
BEGIN
IF @table_name NOT IN('cos_centro', 'cos_apertura','cos_aperturasub', 'nom_centro_Trabajo', 'cos_cuentasasociadas', 'Historial_Cambio_Ccosto')
BEGIN
SET @tsql = 'UPDATE ' + @table_name + ' SET ' + @column_name + ' = ' + CAST(@idccostonew AS NVARCHAR) + ' WHERE ' + @column_name + ' = ' + CAST(@idcostoold AS NVARCHAR)
EXECUTE sp_executesql @tsql
FETCH Tablas_a_actualizar INTO @table_name, @column_name
END
ELSE
BEGIN
FETCH Tablas_a_actualizar INTO @table_name, @column_name
END
END
CLOSE Tablas_a_actualizar
DEALLOCATE Tablas_a_actualizar

SET NOCOUNT OFF
IF (@reconstruir = 1)
BEGIN
SET NOCOUNT ON
EXEC dbo.con_ReconstruirSaldosCuenta
EXEC dbo.con_ReconstruirSaldosCentro
EXEC opt_cargainicial
SET NOCOUNT OFF
print 'Traspaso de operaciones y reconstrucción realizada de manera exitosa....'
END
ELSE
BEGIN
print 'Traspaso de operaciones realizado de manera exitosa'
END
exec sp_MSforeachtable 'Alter Table ? enable Trigger all'

IF NOT EXISTS(SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID('Historial_Cambio_Ccosto'))
BEGIN
CREATE TABLE Historial_Cambio_Ccosto(No_Cambio INT IDENTITY(1,1), ClaveCCostoAnterior NVARCHAR(200), ClaveCCostoActual NVARCHAR(200))
END

DECLARE @detalleCcostoOld VARCHAR(200), @detalleCcostoNew VARCHAR(200)

SET @detalleCcostoOld = @clave_cc_old + ' - ' +(SELECT cc.descripcion FROM cos_centro cc WHERE cc.clave = @clave_cc_old)
SET @detalleCcostoNew = @clave_cc_new + ' - ' +(SELECT cc.descripcion FROM cos_centro cc WHERE cc.clave = @clave_cc_new)

INSERT INTO Historial_Cambio_Ccosto VALUES (@detalleCcostoOld, @detalleCcostoNew)
END
END
Sin mas, Saludos atentamente esperando sus colaboraciones
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder