--- alter degli schema AS400 --> RawData (caricamento dati grezzi) create schema RawData authorization db_accessadmin go -- creo schema x gestione richieste batch create schema BatchQueue authorization db_accessadmin go -- lascio in schema As400 i dati attuali, creo tab nuove RAW create table RawData.XOGIX00F( XRPQLN numeric(6,0) not null constraint DF_XOGIX00F_XRPQLN default (0), XRPQLD numeric(8,0) not null constraint DF_XOGIX00F_XRPQLD default (0), XNRETI char(10) not null constraint DF_XOGIX00F_XNRETI default (''), XCDFOR char(6) not null constraint DF_XOGIX00F_XCDFOR default (''), XCDTER char(6) not null constraint DF_XOGIX00F_XCDTER default (''), XCDPAR char(15) not null constraint DF_XOGIX00F_XCDPAR default (''), XDTPRO numeric(8,0) not null constraint DF_XOGIX00F_XDTPRO default (0), XTRPRO char(5) not null constraint DF_XOGIX00F_XTRPRO default (''), XQTPRO numeric(5,0) not null constraint DF_XOGIX00F_XQTPRO default (0), XDESMT char(3) not null constraint DF_XOGIX00F_XDESMT default (''), XMATSC char(1) not null constraint DF_XOGIX00F_XMATSC default (''), XBENQL char(1) not null ) go -- travaso dati da tab As400 a RawData INSERT INTO RawData.XOGIX00F SELECT * FROM As400.t_XOGIX00F GO -- aggiungo tab rilpro set xact_abort on go begin transaction go create table RilPro.RapQual( nRapQual numeric(6,0) not null, DataRapQual numeric(8,0) not null, ProgUDC nvarchar(10) not null constraint PK_RapQual primary key, CodFor nvarchar(6) not null, DestTerz nvarchar(6) not null, CodLega nvarchar(15) not null, DataPrelFus numeric(8,0) not null, TurnoPrelFus nvarchar(5) not null, Qta numeric(5,0) not null, DestLega nvarchar(3) not null, LegaScaric nvarchar(1) not null, BenesQual nvarchar(1) not null, UDC nvarchar(13) ) go create index i_numRap on RilPro.RapQual(nRapQual) go create index i_dataRap on RilPro.RapQual(DataRapQual) go create index i_numDataRap on RilPro.RapQual(nRapQual,DataRapQual) go commit go -- aggiungo stored di travaso! set xact_abort on go begin transaction go create schema BatchQueue authorization db_accessadmin go set ANSI_NULLS on go /*************************************** * STORED stp_batch_RapQual_S01 * * Esegue lo step 1 (caricamento dati RAW da AS400) per la tab dei rapporti di qualità * * Steamware, S.E.L. * mod: 2010.09.23 * ****************************************/ create PROCEDURE BatchQueue.stp_batch_RapQual_S01 ( @minNumRapQual INT ) AS -- BOZZA DA COMPLETARE A CURA MAZZUCCONI!!! DECLARE @SQL AS NVARCHAR(1000) -- svuoto tab raw attuale /* DELETE FROM RawData.XOGIX00F */ -- INSERISCO DA AS400 /* INSERT INTO RawData.XOGIX00F ( SET @SQL = N'SELECT XRPQLN ,XRPQLD ,XNRETI ,XCDFOR ,XCDTER ,XCDPAR ,XDTPRO ,XTRPRO ,XQTPRO ,XDESMT ,XMATSC ,XBENQL FROM OPENQUERY( P65220DC, ''SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN >= ' SET @SQL = @SQL + @minNumRapQual + ''' )' EXEC dbo.sp_executesql @SQL ) */ RETURN go /*************************************** * STORED stp_batch_RapQual_S01 * * Esegue lo step 2 (travaso dati RAW in RilPro) per la tab dei rapporti di qualità * * Steamware, S.E.L. * mod: 2010.09.23 * ****************************************/ create PROCEDURE BatchQueue.stp_batch_RapQual_S02 AS -- eseguo UPSERT x tutti i dati disponibili in tab Raw... -- se il dato esiste faccio UPDATE!!! UPDATE RilPro.RapQual SET CodFor = u.XCDFOR, DestTerz = u.XCDTER, CodLega = u.XCDPAR, DataPrelFus = u.XDTPRO, TurnoPrelFus= u.XTRPRO, Qta = u.XQTPRO, DestLega = u.XDESMT, LegaScaric = u.XMATSC, BenesQual = u.XBENQL FROM RilPro.RapQual rq INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC; -- AND u.XRPQLN = rq.nRapQual AND u.XRPQLD = rq.DataRapQual; -- se XNRETI è univoco ... -- creo tab temporanea x i dati inesistenti.. WITH cteInsert AS (SELECT x.* FROM RawData.XOGIX00F x LEFT OUTER JOIN RilPro.RapQual rq ON x.XNRETI = rq.ProgUDC -- AND u.XRPQLN = rq.nRapQual AND u.XRPQLD = rq.DataRapQual; -- se XNRETI è univoco ... WHERE rq.ProgUDC IS NULL ) -- se il dato non c'è faccio INSERT!!! INSERT INTO RilPro.RapQual(nRapQual, DataRapQual, ProgUDC, CodFor, DestTerz, CodLega, DataPrelFus, TurnoPrelFus, Qta, DestLega, LegaScaric, BenesQual) SELECT XRPQLN AS nRapQual, XRPQLD AS DataRapQual, XNRETI AS ProgUDC, XCDFOR AS CodFor, XCDTER AS DestTerz, XCDPAR AS CodLega, XDTPRO AS DataPrelFus, XTRPRO AS TurnoPrelFus, XQTPRO AS Qta, XDESMT AS DestLega, XMATSC AS LegaScaric, XBENQL AS BenesQual FROM cteInsert RETURN go commit go - nuove functions set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * function componiUdc * * compone il cod UDC a partire da * - CodCS (codice company sito, 2 char) * - Flusso (codice flusso-bilancia 2 char) * - @Anno (anno, 2 char) * - @numUdc (progr annuale, 2 char) * * Steamware, S.E.L. * mod: 2010.09.23 * ****************************************/ create FUNCTION componiUdc ( @CodCS NVARCHAR(2), @Flusso NVARCHAR(2), @Anno NVARCHAR(2), @numUdc INT ) RETURNS NVARCHAR(13) AS BEGIN DECLARE @answ AS NVARCHAR(50) SET @answ = 'U' + @CodCS + @Flusso + @Anno + dbo.f_padLeft(CAST(@numUdc AS VARCHAR(6)), 6, '0') RETURN @answ END go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * function getUdcComp * * effettua la "compattazione" dell'UDC, andando a prendere un sottoinsieme dei dati iniziali (UAAxxxx dove AA = anno...) * * Steamware, S.E.L. * mod: 2010.09.23 * ****************************************/ create FUNCTION getUdcComp ( @fullUDC NVARCHAR(50), @maxLen INTEGER ) RETURNS NVARCHAR(20) AS BEGIN -- calcolo lunghezza originale DECLARE @fullLen AS INT SET @fullLen = LEN(@fullUDC) -- dichiaro stringa out (max 20 char) DECLARE @answ NVARCHAR(20) -- recupero parte finale (ultimi @maxLen caratteri...) -- compongo codice SET @answ = 'U' + RIGHT(LEFT(@fullUDC, 7), 2) + RIGHT(@fullUDC,@maxLen-3) -- tolgo 3 char: U + anno... RETURN @answ END go commit go -- altre stored set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_rappQualAssociaUdc * * Associa l'UDC (creato) ad un rapp qualità di AS esistente SOLO SE UDC è NULL * * Steamware, S.E.L. * mod: 2010.09.23 * ****************************************/ create PROCEDURE stp_rappQualAssociaUdc ( @ProgUDC NVARCHAR(10), @UDC NVARCHAR(13) ) AS UPDATE RilPro.RapQual SET UDC = @UDC WHERE (ProgUDC = @ProgUDC) AND (UDC IS NULL) -- restituisce la riga aggiornata SELECT * FROM RilPro.RapQual WHERE ProgUDC = @ProgUDC RETURN go /*************************************** * STORED stp_rappQualGetByNumRapQual * * Ottiene l'elenco dei record di rapp qualità di AS dato il numero del rapporto di qualità che NON HANNO UDC * * Steamware, S.E.L. * mod: 2010.09.23 * ****************************************/ create PROCEDURE stp_rappQualGetByNumRapQual ( @nRapQual INT ) AS -- restituisce le righe richieste SELECT * FROM RilPro.RapQual WHERE (nRapQual = @nRapQual) AND (UDC IS NULL) RETURN go commit go -- update stored set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_UDC_insNew * * crea un nuovo record nella TabStatoOdpUdc e restituisce il codice UDC appena creato * * Steamware, S.E.L. * mod: 2010.04.28 * ****************************************/ alter PROCEDURE stp_UDC_insNew ( @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @Tara FLOAT, @CodImballo AS VARCHAR(50), @CodTipoDichiaraz CHAR(1), @CodOperatore AS VARCHAR(50), @CodEvento VARCHAR(10) ) AS -- DECLARE iniziali DECLARE @UDC AS VARCHAR(20) DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT ------------------------------------------------------------------------------------------------------ -- Flusso ------------------------------------------------------------------------------------------------------ -- controllo se esiste il flusso (bilancia)... SET @numFlu = ( SELECT count(*) FROM AnagBilance WHERE CodBilancia = @Flusso ) -- ...sennò lo creo... IF(@numFlu = 0) BEGIN -- se c'è inserisco in tab INSERT INTO AnagBilance(CodBilancia, DescrImpianto, CodCS) VALUES (@Flusso, @Flusso, @CodCS) END ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- UDC ------------------------------------------------------------------------------------------------------ -- controllo se ci sia già un UDC per company / flusso anno BEGIN TRAN -- cerco nella tab contatori UDC l'ultimo valido SET @numUdc = ( SELECT count(*) FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) -- controllo se record c'è... IF(@numUdc > 0) BEGIN -- se c'è incremento di 1 in tab UPDATE ContatoriUdc SET LastIdx = LastIdx + 1 WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno END ELSE BEGIN -- lo creo! INSERT INTO ContatoriUdc(CodCS, Flusso, Anno, LastIdx) VALUES (@CodCS, @Flusso, @Anno, 1) END -- aggiorno numero UDC SET @numUdc = ( SELECT LastIdx FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ -- ottengo il nuovo codice UDC completo --SET @UDC = 'U' + @CodCS + @Flusso + @Anno + dbo.f_padLeft(CAST(@numUdc AS VARCHAR(6)), 6, '0') SET @UDC = dbo.componiUdc(@CodCS, @Flusso, @Anno, @numUdc) -- inserisco un nuovo record INSERT INTO ElencoCartellini(CodCS, UDC, Tara, IdxPosizione, Qta, CodImballo, CreateDate, ModDate) VALUES (@CodCS, @UDC, @Tara, 0, 0, @CodImballo, GETDATE(), GETDATE()) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go /*************************************** * STORED stp_UDC_insNewFull * * crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) e restituisce il codice UDC appena creato * * Steamware, S.E.L. * mod: 2010.04.28 * ****************************************/ alter PROCEDURE stp_UDC_insNewFull ( @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @CodCliente VARCHAR(6), @Particolare VARCHAR(15), @CodImpianto AS VARCHAR(50), @CodStampo VARCHAR(8), @Esponente VARCHAR(6), @Figura VARCHAR(4), @DataFus DATETIME, @TurnoFus INT, @CodImballo VARCHAR(15), @CodSoggetto VARCHAR(17), @Tara FLOAT, @IdxPosizione INT, @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2), @PesoTot FLOAT, @PesoCad FLOAT, @CodStato VARCHAR(50), @UDC_parent VARCHAR(20) ) AS -- DECLARE iniziali DECLARE @UDC AS VARCHAR(20) DECLARE @RagSociale AS VARCHAR(35) DECLARE @DescParticolare AS VARCHAR(30) DECLARE @DescImpianto AS VARCHAR(50) DECLARE @DisegnoGrezzo AS VARCHAR(30) DECLARE @NumCont AS INT DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT ------------------------------------------------------------------------------------------------------ -- Caricamento Dati da anagrafica ------------------------------------------------------------------------------------------------------ -- cerco la ragione sociale... SET @RagSociale = ( SELECT ISNULL(RagSociale, 'ND') AS RagSociale FROM RilPro.AnagClienti WHERE (CodCliente = @CodCliente) ) -- Cerco descrizione del particolare... SET @DescParticolare = ( SELECT ISNULL(DescParticolare, 'ND') AS DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) -- cerco codice disegno grezzo SET @DisegnoGrezzo = ( SELECT ISNULL(DisegnoGrezzo, 'ND') AS DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) -- cerco descrizione Impianto SET @DescImpianto = ( SELECT ISNULL(DescImpianto, 'ND') AS DescImpianto FROM AnagImpianti WHERE (CodImpianto = @CodImpianto) ) -- Calcolo contatore intero successivo x il contenitore... SET @NumCont = ( SELECT ISNULL(MAX(NumCont), 0) + 1 AS NumCont FROM ElencoCartellini WHERE (Particolare = @Particolare) AND (DataFus = @DataFus) AND (TurnoFus = @TurnoFus) AND (CodImpianto = @CodImpianto) AND (CodStampo = @CodStampo) AND (Figura = @Figura) ) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Flusso ------------------------------------------------------------------------------------------------------ -- controllo se esiste il flusso (bilancia)... SET @numFlu = ( SELECT count(*) FROM AnagBilance WHERE CodBilancia = @Flusso ) -- ...sennò lo creo... IF(@numFlu = 0) BEGIN -- se c'è inserisco in tab INSERT INTO AnagBilance(CodBilancia, DescrImpianto, CodCS) VALUES (@Flusso, @Flusso, @CodCS) END ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- UDC ------------------------------------------------------------------------------------------------------ -- controllo se ci sia già un UDC per company / flusso anno BEGIN TRAN -- cerco nella tab contatori UDC l'ultimo valido SET @numUdc = ( SELECT count(*) FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) -- controllo se record c'è... IF(@numUdc > 0) BEGIN -- se c'è incremento di 1 in tab UPDATE ContatoriUdc SET LastIdx = LastIdx + 1 WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno END ELSE BEGIN -- lo creo! INSERT INTO ContatoriUdc(CodCS, Flusso, Anno, LastIdx) VALUES (@CodCS, @Flusso, @Anno, 1) END -- aggiorno numero UDC SET @numUdc = ( SELECT LastIdx FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- ottengo il nuovo codice UDC completo --SET @UDC = 'U' + @CodCS + @Flusso + @Anno + dbo.f_padLeft(CAST(@numUdc AS VARCHAR(6)), 6, '0') SET @UDC = dbo.componiUdc(@CodCS, @Flusso, @Anno, @numUdc) -- inserisco un nuovo record INSERT INTO ElencoCartellini(UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, CreateDate, ModDate) VALUES (@UDC, @CodCS, @CodCliente, @RagSociale, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente, @CodImpianto, @DescImpianto, @CodStampo, @Figura, @DataFus, @TurnoFus, @CodImballo, @CodSoggetto, @NumCont, @Tara, @Qta, @CodStato, @IdxPosizione, @PesoTot, @PesoCad, GETDATE(), GETDATE()) -- inserisco relazione aprent-child tra UDC vecchio (tara) e nuovo (pesa) INSERT INTO RelazUDC(UDC_parent, UDC_child) VALUES (@UDC_parent, @UDC) COMMIT TRAN ------------------------------------------------------------------------------------------------------ /* ------------------------------------------------------------------------------------------------------ -- Salvataggio dati evento in tab StoricoEventi ------------------------------------------------------------------------------------------------------ INSERT INTO StoricoEventi(DataEv, CodEvento, CodOperatore, CodTipoDichiaraz, CodCS, UDC, Qta, PesoTot, PesoCad, Particolare, CodStato, CodStampo, Figura, FiguraIncisa) VALUES (GETDATE(), @CodEvento, @CodOperatore, @CodTipoDichiaraz, @CodCS, @UDC, @Qta, @PesoTot, @PesoCad, @Particolare, @CodStato, @CodStampo, @Figura, @FiguraIncisa) ------------------------------------------------------------------------------------------------------ */ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go commit go -- aggiungo stato MP set xact_abort on go begin transaction go INSERT INTO dbo.AnagStatiProdotto VALUES (N'MP', N'Materia Prima') go commit transaction go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(257, GETDATE()) GO