Files
GMW/GMW_DB/BatchQueue/Stored Procedures/stp_processaCodaConsumoMP.sql
T
Samuele Locatelli a6d7ea0b2f Import iniziale DB, GMW
versione TK 2.4
inclusione schema voc x tabella lingue e vocabolario
2014-02-20 09:54:57 +01:00

91 lines
3.3 KiB
Transact-SQL

/***************************************
* STORED stp_processaCodaConsumoMP
*
* Processa la coda dei consumo di UDC di MP e chiaam procedura x salvataggio dato su AS400
*
* Steamware
* mod:
*
****************************************/
CREATE PROCEDURE [BatchQueue].[stp_processaCodaConsumoMP]
(
@ExecBatchInter BIT -- 0 Eseguita in Batch , 1 in Interattivo
)
AS
-- faccio una query con un cursore x processare tutte le righe da inviare ad AS400..
DECLARE @UDC NVARCHAR(50) -- UDC SQL
DECLARE @XRPQLN INT -- UDC
DECLARE @XNRETI NVARCHAR(10) -- Progr UDC AS400
DECLARE @XDTPRO INT -- DataPrelievo
DECLARE @XTRPRO NVARCHAR(5) -- Turno Prelievo
DECLARE @XDESMT NVARCHAR(3) -- Destinazione Lega
DECLARE @XCDTER NVARCHAR(6) -- Cod. Terzista
DECLARE @ScritturaASOK AS INT = 0;
DECLARE @InteroCicloASOK AS INT = 0; -- memorizzo errore nel ciclo WHILE
-- Dichiaro e carico il cursore
DECLARE UdcMpList CURSOR LOCAL FOR
SELECT UDC FROM dbo.AS400_BatchConsumoMP WHERE DataInvioAs IS NULL
OPEN UdcMpList
FETCH NEXT FROM UdcMpList
INTO @UDC
WHILE @@FETCH_STATUS = 0
BEGIN
-- controllo ci sia la riga
IF (SELECT COUNT(UDC) FROM AS400_BatchConsumoMP WHERE UDC=@UDC) > 0
BEGIN
-- carico valori che mi servono
SELECT @XRPQLN=rq.nRapQual, @XNRETI=rq.ProgUDC, @XDTPRO=bcu.DataPrelFus, @XTRPRO=bcu.TurnoPrelFus,
@XDESMT=bcu.DestLega, @XCDTER=bcu.DestTerz
FROM dbo.AS400_BatchConsumoMP as bcu
INNER JOIN RilPro.RapQual as rq ON bcu.UDC = rq.UDC
WHERE bcu.UDC=@UDC
-- BEGIN TRAN qui non va messa perchè se verso AS400 le transazioni non sono gestite
-- MANCA IL CONTROLLO SE L'AGGIORNAMENTO E' STATO OK
EXECUTE @ScritturaASOK = BatchQueue.stp_consumaMP @XRPQLN ,@XNRETI ,@XDTPRO ,@XTRPRO ,@XDESMT ,@XCDTER
-- registro la data del movimento BATCH solo se stp_consumaMP ritorna OK
-- Così non aggiorna la tabella MA L'UTENTE NON SI ACCORGE DI NULLA!!!
IF @ScritturaASOK = 0
UPDATE dbo.AS400_BatchConsumoMP SET DataInvioAs = GETDATE() WHERE UDC = @UDC
ELSE
SET @InteroCicloASOK = @ScritturaASOK
FETCH NEXT FROM UdcMpList INTO @UDC
END
END
CLOSE UdcMpList
DEALLOCATE UdcMpList
-- aggiunta per dare errore se schedulata!!! GCARLO
-- Se la scrittura su AS400 ha dato errore ed è stata eseguita in batch sollevo l'errore
-- così anche il batch da errore
IF @InteroCicloASOK <> 0 AND @ExecBatchInter = 0
BEGIN
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT = 16;
DECLARE @ErrorState INT = 1;
IF @InteroCicloASOK < 0 -- errore nella verifica della scrittura su AS400
SELECT @ErrorMessage = 'Errore nella VERIFICA di scrittura su AS400 in stp_consumaMP'
ELSE
SELECT -- nn so se riesce a leggere i dati dell'errore cmq lo solleva
@ErrorMessage = ERROR_MESSAGE()+ ' '+ CONVERT( VARCHAR(10),ERROR_NUMBER()),
@ErrorSeverity = ISNULL(ERROR_SEVERITY(),16),
@ErrorState = ERROR_STATE();
-- sollevo errore per mandare in errore la procedura schedulata
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END
RETURN