Files
GMW/GMW_DB/BatchQueue/Stored Procedures/stp_consumaMP.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

141 lines
5.7 KiB
Transact-SQL

/***************************************
* STORED stp_consumaMP
*
* Salva il movimento di consumo dell'UDC di MP indicato
*
* Steamware, S.E.L.
* mod: 2010.10.12
*
****************************************/
CREATE PROCEDURE [BatchQueue].[stp_consumaMP]
(
@XRPQLN INT, -- è il num rap qualità
@XNRETI NVARCHAR(10), -- è il numUdc prog AS400
@XDTPRO INT, -- data 8 cifre aaaammgg Data Prelievo Fusione
@XTRPRO NVARCHAR(5), -- turno prelievo ( solo se interno )
@XDESMT NVARCHAR(3), -- destinatario int/terzista ( F01 / T01 )
@XCDTER NVARCHAR(6) -- cod terzista ( Anagrafico Depositi )
)
AS
-- Salva consumo cartellini Rapporti qualità Materia Prima
-- FILE XOGIX00F
-- LIBRERIA TEST MAZZT_DTV3
-- LIBRERIA EFFETT. TEKAL TEKA_DATV3
-- LIBRERIA EFFETT. SP POSN_DATV3
/* PER TESTARE
DECLARE @XRPQLN INT, -- è il num rap qualità
@XNRETI NVARCHAR(10), -- è il numUdc prog
@XDTPRO INT, -- data 8 cifre aaaammgg
@XTRPRO NVARCHAR(5), -- turno
@XDESMT NVARCHAR(3), -- destinatario int/terzista
@XCDTER NVARCHAR(6) -- cod terzista
SET @XRPQLN = 905793 -- è il num rap qualità
SET @XNRETI = 'U100548151' -- è il numUdc prog
SET @XDTPRO = 20100723 -- data 8 cifre aaaammgg
SET @XTRPRO = 'S' -- turno
SET @XDESMT = 'F01' -- destinatario int/terzista
SET @XCDTER = '' -- cod terzista
*/
DECLARE @SQL AS NVARCHAR(4000);
DECLARE @SqlOK AS INT;
DECLARE @As400File AS NVARCHAR(50) = '';
DECLARE @As400Linked AS NVARCHAR(50) = ''; -- Linked Server AS400
SET @SqlOK = 0;
-- In base al nome del DB e della stored recupero il Linked Server e file di AS400 27/06/2013
SET @As400Linked = ( SELECT dbo.f_getLikedAS400(DB_NAME()) );
SET @As400File = ( SELECT dbo.f_getLibreriaAS400 ( DB_NAME() , OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID) ) )
BEGIN TRY
-- TEST per generare errore
-- SET @XDTPRO = 99999920100723 -- data 8 cifre aaaammgg
-- ==============================================================
-- Creo l'istruzione SQL e faccio chiamata su AS400
-- Aggiorno solo se su As400 Legascar è N XMATSC = 'N' mettendo poi S
-- indico su As400 che il cartellino UDC della Lega è stato scaricato
-- ==============================================================
SET @SQL = N'UPDATE OPENQUERY(' + @As400Linked
SET @SQL = @SQL + N', ''SELECT * FROM ' + @As400File
SET @SQL = @SQL + ' WHERE XRPQLN = ' + CAST(@XRPQLN AS NVARCHAR(20)) -- Numero Rapporto Qualita
SET @SQL = @SQL + ' AND XMATSC = ''''N'''' AND XNRETI = ''''' + @XNRETI + ''''''' ) ' -- non ancora scaricato ('N') e Numero UDC AS400
SET @SQL = @SQL + 'SET XDTPRO = ' + CAST(@XDTPRO AS NVARCHAR(8)) -- Data
SET @SQL = @SQL + ', XTRPRO = ''' + @XTRPRO + '''' -- Turno
SET @SQL = @SQL + ', XDESMT = ''' + @XDESMT + '''' -- Destinatario
SET @SQL = @SQL + ', XMATSC = ''S''' -- Flag Lega Scaricata
SET @SQL = @SQL + ', XCDTER = ''' + @XCDTER + ''''; -- Cod Terzista
-- Eseguo il comando T-SQL verso AS400
EXEC sp_executesql @SQL;
-- EXEC @SqlOK = sp_executesql @SQL se faccio così non mi valorizza la variabile se da errore
END TRY
BEGIN CATCH
-- se entro nel CATCH c'è stato un errore quindo lo memorizzo
SET @SqlOK = ERROR_NUMBER();
END CATCH
-- Test di lettura - Modifica 14/06/2011
IF @SqlOK = 0 -- Se sp_executesql è Ok
BEGIN
SET @SqlOK = -1 -- lo rimetto a 0 solo se lettura è OK
-- Controllo che l'UDC sia stato scaricato in modo corretto su AS400
DECLARE @SQL2 AS NVARCHAR(4000);
DECLARE @LettoOk AS INT = 99;
SET @SQL2 = N'SELECT @LettoOk = COUNT(*) FROM OPENQUERY(' + @As400Linked
SET @SQL2 = @SQL2 + N', ''SELECT XRPQLN FROM ' + @As400File
SET @SQL2 = @SQL2 + N' WHERE XRPQLN = ' + CAST(@XRPQLN AS NVARCHAR(20)) -- Numero Rapporto Qualita
SET @SQL2 = @SQL2 + N' AND XNRETI = ''''' + @XNRETI + '''''' -- Numero UDC AS400
SET @SQL2 = @SQL2 + N' AND XMATSC = ''''N''''' -- non ancora scaricato ('N')
SET @SQL2 = @SQL2 + N''' ) '
EXEC sp_executesql @SQL2, N'@LettoOk INT OUTPUT', @LettoOk OUTPUT;
-- Se trovo record UDC non scaricato lo imposto come errore -2 altrimenti tutto OK
IF @LettoOk = 0 SET @SqlOK = 0 ELSE SET @SqlOK = -2
END
-- Fine Modifica - Modifica 14/06/2011
-- Memorizzo il comando per verifica T-SQL e l'esito del comando se 0 è OK
INSERT INTO RawData.AS400_Comandi
SELECT GETDATE(), 'stp_consumaMP', @SQL, @SqlOK;
-- è possibile sollevare un RAISERROR ??? come si comporta poi il programma?
-- NON SI FANNO RAISE ERROR!!!!!
RETURN @SqlOK;
/* -- sono tutte su DB di test
SELECT XRPQLN, XNRETI , XDTPRO, XTRPRO, XDESMT, XMATSC, XCDTER
FROM OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ')
-- Resetto l'UDC
UPDATE OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ')
SET XDTPRO = 0 , XTRPRO = '', XDESMT = '', XMATSC = 'N', XCDTER = ''
-- Comando OK
-- UPDATE OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ')
-- SET XDTPRO = 20100723 , XTRPRO = 'S', XDESMT = 'F01', XMATSC = 'N', XCDTER = ''
*/