Я пытаюсь выполнить хранимую процедуру, используя Java.Этот SP выполняет курсор для удаления регистров в моей базе данных, но он не работает.Когда метод выполняется, он завершается без удаления всех регистров.Когда я отлаживаю свой код, он работает после добавления «thread.sleep (30 000)».Почему мой код работает после перехода в спящий режим?
Мой код:
SP (SQL Server) Это хорошо работает, я попробовал его по отдельности.
USE [PRUEBA]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[SP_PURGA] (@iDIAS_PURGA INT, @iDIAS_IGNORAR INT)
AS
--DECLARE @iDIAS_PURGA INT = -3, @iDIAS_IGNORAR INT = -3
DECLARE @nvFechaInicio DATETIME, @nvFechaFin DATETIME;
DECLARE @iSeq_num INT;
SELECT @nvFechaFin = DATEADD(DAY,@iDIAS_IGNORAR,GETDATE());
SELECT @nvFechaInicio = DATEADD(DAY,@iDIAS_PURGA+1,@nvFechaFin);
--JL: CREAMOS UN CURSOR PARA ELIMNAR LOS REGISTROS.
DECLARE C_METADATOS CURSOR FOR
SELECT seq_num FROM TLC_VERINT.dbo.Imported_sessions
WHERE CONVERT(NVARCHAR(10),creation_time,103) BETWEEN CONVERT(NVARCHAR(10),@nvFechaInicio,103) AND CONVERT(NVARCHAR(10),@nvFechaFin,103)
AND is_deleted = 1
OPEN C_METADATOS;
FETCH C_METADATOS INTO @iSeq_num;
WHILE(@@FETCH_STATUS=0)
BEGIN
--ELIMINAMOS REGISTROS DE "Imported_sessions_audio"
DELETE FROM Imported_sessions_audio WHERE seq_num = @iSeq_num;
--ELIMINAMOS REGISTROS DE "Imported_sessions"
DELETE FROM Imported_sessions WHERE seq_num = @iSeq_num;
--AVANZAMOS AL SIGUIENTE REGISTROS
FETCH C_METADATOS INTO @iSeq_num;
END
CLOSE C_METADATOS;
DEALLOCATE C_METADATOS;
Мой код на Java, я поставил sleep и работает.
@Override
public void fEliminarMetadatos(int iDIAS_PURGA,int iDIAS_IGNORAR) {
//JL: Variables
Connection consql = null;
PreparedStatement pstm = null;
//JL: Consulta
try {
consql = new Conexion().getDBConnectionVerint();
pstm = consql.prepareStatement("exec [dbo].[SP_PURGA] ?,?");
pstm.setInt(1, iDIAS_PURGA);
pstm.setInt(2,iDIAS_IGNORAR);
//JL: Ejecutamos
pstm.execute();
//Thread.sleep(60000);
}catch(Exception e) {
new CrearLog().archivoLog("::: ERROR ::: Ocurrio un error mientras se ejecutaba ::: [dbo].[SP_PURGA].");
new CrearLog().archivoLog("::: ERROR ::: "+e);
Var_runtime.exit(1);
}finally {
try {
if(!consql.isClosed()) {consql.close();}
if(!pstm.isClosed()) { pstm.close();}
}catch (Exception e) {
new CrearLog().archivoLog("::: ADVERTENCIA ::: Ocurrio un error mientras se trataba de cerrar la conexión para la consulta ::: [dbo].[SP_PURGA].");
new CrearLog().archivoLog("::: ADVERTENCIA ::: " + e);
new CrearLog().archivoLog("::: ADVERTENCIA ::: El error no es grave, el proceso de extración continuará.");
}
}
}
Как я могу заставить этот код работать без сна?