Files
GMW/GMW_data/SqlScripts/V1.1/GMW_00257.sql
T

698 lines
18 KiB
Transact-SQL

--- 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 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