356 lines
9.3 KiB
Transact-SQL
356 lines
9.3 KiB
Transact-SQL
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
alter table DatiMacchine add
|
|
insEnabled bit constraint DF_DatiMacchine_insEnabled default ((1));
|
|
go
|
|
|
|
exec sp_addextendedproperty 'MS_Description', 'definisce se l''INSERT sia abilitato per la macchina (disabilitato in fase di ricostruzione batch...)', 'SCHEMA', 'dbo', 'TABLE', 'DatiMacchine', 'COLUMN', 'insEnabled';
|
|
go
|
|
|
|
update DatiMacchine set insEnabled=((1));
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE InsStatoBatch
|
|
* inserimento di uno stato nel db (tab DiarioDiBordo)
|
|
* inerimento in anagrafica a "nd" dell'operatore se matricola mancasse
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2008.08.07
|
|
**************************************/
|
|
alter PROCEDURE stp_DDB_InsStatoBatch
|
|
(
|
|
@IdxMacchina varchar(50),
|
|
@InizioStato datetime,
|
|
@IdxStato int,
|
|
@MatricolaKanban varchar(50),
|
|
@Value varchar(50),
|
|
@MatrOpr int,
|
|
@pallet varchar(20)
|
|
)
|
|
AS
|
|
/*************************************
|
|
* verifico se esista operatore
|
|
**************************************/
|
|
DECLARE @matrOut INT = @MatrOpr + 1
|
|
SELECT @matrOut = ISNULL (
|
|
(
|
|
SELECT MatrOpr FROM AnagraficaOperatori
|
|
WHERE (MatrOpr = @MatrOpr)
|
|
),-999999
|
|
)
|
|
IF (@matrOut <> @MatrOpr ) -- significa che la matricola NON C'E'...
|
|
BEGIN
|
|
/* inserisco nuovo record */
|
|
INSERT INTO AnagraficaOperatori(MatrOpr, Cognome, Nome)
|
|
VALUES (@MatrOpr,'nd (cognome)','nd (nome)')
|
|
END
|
|
|
|
-- controllo se input abilitato
|
|
DECLARE @insEnabled BIT
|
|
SET @insEnabled = ( SELECT insEnabled FROM DatiMacchine WHERE IdxMacchina = @IdxMacchina )
|
|
|
|
-- inserisco SOLO SE è abilitato input x quella macchina
|
|
IF(@insEnabled = 1)
|
|
BEGIN
|
|
/* inserisco valori */
|
|
INSERT INTO DiarioDiBordo
|
|
(IdxMacchina, InizioStato, FineStato, IdxStato, MatricolaKanban, Value, MatrOpr, pallet)
|
|
VALUES (@IdxMacchina, @InizioStato, NULL, @IdxStato, @MatricolaKanban, @Value, @MatrOpr, @pallet)
|
|
END
|
|
|
|
RETURN
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE InsStato
|
|
* inserimento di uno stato nel db (tab DiarioDiBordo)
|
|
* inerimento in anagrafica a "nd" dell'operatore se matricola mancasse
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2008.08.07
|
|
**************************************/
|
|
alter PROCEDURE stp_DDB_InsStato
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@IdxStato INT,
|
|
@MatricolaKanban NVARCHAR(50),
|
|
@Value NVARCHAR(50),
|
|
@MatrOpr INT,
|
|
@pallet NVARCHAR(20)
|
|
)
|
|
AS
|
|
/*************************************
|
|
* verifico se esista operatore
|
|
**************************************/
|
|
DECLARE @matrOut INT = @MatrOpr + 1
|
|
SELECT @matrOut = ISNULL (
|
|
(
|
|
SELECT MatrOpr FROM AnagraficaOperatori
|
|
WHERE (MatrOpr = @MatrOpr)
|
|
),-999999
|
|
)
|
|
IF (@matrOut <> @MatrOpr ) -- significa che la matricola NON C'E'...
|
|
BEGIN
|
|
/* inserisco nuovo record */
|
|
INSERT INTO AnagraficaOperatori(MatrOpr, Cognome, Nome)
|
|
VALUES (@MatrOpr,'nd (cognome)','nd (nome)')
|
|
END
|
|
|
|
-- controllo se input abilitato
|
|
DECLARE @insEnabled BIT
|
|
SET @insEnabled = ( SELECT insEnabled FROM DatiMacchine WHERE IdxMacchina = @IdxMacchina )
|
|
|
|
-- inserisco SOLO SE è abilitato input x quella macchina
|
|
IF(@insEnabled = 1)
|
|
BEGIN
|
|
/* inserisco valori */
|
|
INSERT INTO DiarioDiBordo
|
|
(IdxMacchina, InizioStato, FineStato, IdxStato, MatricolaKanban, Value, MatrOpr, pallet)
|
|
VALUES (@IdxMacchina, GETDATE(), NULL, @IdxStato, @MatricolaKanban, @Value, @MatrOpr, @pallet)
|
|
END
|
|
|
|
RETURN
|
|
go
|
|
|
|
-- ================================================
|
|
-- Author: Samuele E. Locatelli
|
|
-- Create date: 2012.11.23
|
|
--
|
|
-- Description: rigenerazioen del diario di bordo
|
|
-- a partire da macchina eventi/stati + EventList
|
|
-- ================================================
|
|
create PROCEDURE stp_ZZZ_rigeneraDDB
|
|
(
|
|
@idxStatoStart INT = 1,
|
|
@idxMacchina NVARCHAR(50),
|
|
@inizio DATETIME,
|
|
@fine DATETIME
|
|
)
|
|
AS
|
|
|
|
DBCC SHOWCONTIG(EventList)
|
|
DBCC SHOWCONTIG(DiarioDiBordo)
|
|
|
|
EXEC USP_DisableEnableNonClusteredIndexes 'MoonPro',null, 1 --disabilito indici
|
|
|
|
-- svuoto dati che vado a sostituire
|
|
PRINT 'svuoto DiarioDiBordo per periodo indicato...'
|
|
EXEC stp_DDB_deleteMacchinaPeriodo @idxMacchina, @inizio, @fine
|
|
PRINT 'svuoto TempiCicloRilevati per periodo indicato...'
|
|
DELETE FROM TempiCicloRilevati WHERE idxMacchina = @idxMacchina AND DataOraRif BETWEEN @inizio AND @fine
|
|
|
|
PRINT 'processo EventList per periodo indicato...'
|
|
DECLARE @InizioStato DATETIME
|
|
DECLARE @IdxTipo INT
|
|
DECLARE @MatricolaKanban NVARCHAR(50)
|
|
DECLARE @Value NVARCHAR(50)
|
|
DECLARE @MatrOpr INT
|
|
DECLARE @pallet NVARCHAR(20)
|
|
DECLARE @nextIdxStato INT
|
|
DECLARE @currIdxStato INT
|
|
DECLARE @IdxFamiglia INT
|
|
|
|
-- calcolo famiglia macchina!
|
|
SET @IdxFamiglia = ( SELECT IdxFamiglia FROM Macchine2FamiglieMacchine WHERE idxMacchina = @idxMacchina )
|
|
|
|
-- ipotizzo macchina inizialmente in stato richiesto (default: 1 = pronta) e quindi imposto stato current a quello iniziale richiesto...
|
|
SET @currIdxStato = @idxStatoStart
|
|
|
|
-- DISATTIVO inserimento in DiarioDiBordo per la macchina indicata
|
|
UPDATE DatiMacchine
|
|
SET insEnabled = 0
|
|
WHERE IdxMacchina = @IdxMacchina
|
|
|
|
-- leggo la tabella degli eventi con cursore x percorrere i dati...
|
|
DECLARE event2proc CURSOR FOR
|
|
SELECT InizioStato, IdxTipo, MatricolaKanban, Value, MatrOpr, pallet
|
|
FROM EventList
|
|
WHERE IdxMacchina = @idxMacchina
|
|
AND InizioStato BETWEEN @inizio AND @fine
|
|
ORDER BY InizioStato;
|
|
|
|
OPEN event2proc;
|
|
|
|
FETCH NEXT FROM event2proc
|
|
INTO @InizioStato, @IdxTipo, @MatricolaKanban, @Value, @MatrOpr, @pallet;
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
-- calcolo l'eventuale NUOVO idxStato
|
|
SET @nextIdxStato = ( SELECT ISNULL( (SELECT next_IdxStato FROM TransizioneStati WHERE IdxFamiglia = @IdxFamiglia AND IdxStato = @currIdxStato AND IdxTipo = @IdxTipo ), @currIdxStato) )
|
|
|
|
-- SE lo stato cambia registro nel DiarioDiBordo!
|
|
IF(@nextIdxStato <> @currIdxStato)
|
|
BEGIN
|
|
-- inserisco in DiarioDiBordo
|
|
INSERT INTO DiarioDiBordo
|
|
(IdxMacchina, InizioStato, FineStato, IdxStato, MatricolaKanban, Value, MatrOpr, pallet)
|
|
VALUES (@IdxMacchina, @InizioStato, NULL, @nextIdxStato, @MatricolaKanban, @Value, @MatrOpr, @pallet)
|
|
-- infine imposto il nuovo stato current...
|
|
SET @currIdxStato = @nextIdxStato
|
|
END
|
|
|
|
-- Get the next values
|
|
FETCH NEXT FROM event2proc
|
|
INTO @InizioStato, @IdxTipo, @MatricolaKanban, @Value, @MatrOpr, @pallet;
|
|
END
|
|
CLOSE event2proc;
|
|
DEALLOCATE event2proc;
|
|
|
|
-- RI-ATTIVO inserimento in DiarioDiBordo per la macchina indicata
|
|
UPDATE DatiMacchine
|
|
SET insEnabled = 1
|
|
WHERE IdxMacchina = @IdxMacchina
|
|
|
|
PRINT 'concluso UPDATE tabelle...'
|
|
|
|
|
|
DBCC SHOWCONTIG(EventList)
|
|
DBCC SHOWCONTIG(DiarioDiBordo)
|
|
EXEC USP_DisableEnableNonClusteredIndexes 'MoonPro',null, 2 --riattivo indici
|
|
|
|
|
|
--ricostruisco indici
|
|
PRINT 'ricostruisco indici...'
|
|
DBCC DBREINDEX(EventList)
|
|
DBCC DBREINDEX(DiarioDiBordo)
|
|
DBCC DBREINDEX(TransizioneIngressi)
|
|
DBCC DBREINDEX(Kanban2ins)
|
|
DBCC DBREINDEX(Kanban)
|
|
DBCC DBREINDEX(AnagraficaOperatori)
|
|
DBCC DBREINDEX(AnagraficaOperatori2ins)
|
|
|
|
DBCC SHOWCONTIG(EventList)
|
|
DBCC SHOWCONTIG(DiarioDiBordo)
|
|
|
|
/*
|
|
--shrink del db
|
|
PRINT 'compatto DB...'
|
|
DBCC SHRINKDATABASE (MoonPro)
|
|
*/
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
|
|
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_TS_getByIdxMacchIdxTipoEv
|
|
* restituisce una riga transizione stati/eventi data macchina ed evento (confrontando lo stato attuale della macchina)
|
|
*
|
|
* modif.: S.E.L. - 2012.11.23
|
|
**************************************/
|
|
create PROCEDURE stp_TS_getByIdxMacchIdxTipoEv
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@IdxTipo INT
|
|
)
|
|
AS
|
|
|
|
|
|
SELECT TransizioneStati.IdxFamiglia, TransizioneStati.IdxStato, TransizioneStati.IdxTipo, TransizioneStati.next_IdxStato
|
|
FROM TransizioneStati INNER JOIN
|
|
Macchine2FamiglieMacchine ON TransizioneStati.IdxFamiglia = Macchine2FamiglieMacchine.IdxFamiglia INNER JOIN
|
|
Macchine ON Macchine2FamiglieMacchine.IdxMacchina = Macchine.IdxMacchina INNER JOIN
|
|
StatoMacchine ON Macchine.IdxMacchina = StatoMacchine.IdxMacchina AND TransizioneStati.IdxStato = StatoMacchine.IdxStato
|
|
WHERE (Macchine.IdxMacchina = @IdxMacchina) AND (TransizioneStati.IdxTipo = @IdxTipo) AND (TransizioneStati.IdxFamiglia <> 1)
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
|
|
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/***************************************************
|
|
* Trigger trg_EV_filtroIns
|
|
*
|
|
* filtro operazioni scrittura su tab EventList:
|
|
* - scrive un NUOVO recordo SOLO SE la chiave differisce per almeno 2 valori
|
|
*
|
|
* modificato: S.E.L.
|
|
* 2012.11.26
|
|
*
|
|
***************************************************/
|
|
create TRIGGER trg_EV_filtroIns
|
|
ON EventList
|
|
INSTEAD OF INSERT
|
|
AS
|
|
|
|
IF (@@ROWCOUNT = 1)
|
|
BEGIN
|
|
DECLARE @IdxMacchina AS NVARCHAR(50)
|
|
DECLARE @InizioStato AS DATETIME
|
|
DECLARE @IdxTipo AS INT
|
|
DECLARE @numMin AS INT=4
|
|
DECLARE @trovati AS INT=0
|
|
|
|
SELECT @IdxMacchina=IdxMacchina, @InizioStato=InizioStato, @IdxTipo=IdxTipo FROM INSERTED
|
|
|
|
;WITH myCTE AS
|
|
(
|
|
SELECT TOP(@numMin) ev.*
|
|
FROM EventList ev
|
|
INNER JOIN INSERTED i ON ev.IdxMacchina=i.IdxMacchina
|
|
ORDER BY InizioStato DESC
|
|
)
|
|
SELECT @trovati=COUNT(IdxTipo) FROM myCTE WHERE idxTipo = @IdxTipo
|
|
|
|
-- se tutte le righe sono con stesso tipo...
|
|
|
|
IF(@trovati < @numMin)
|
|
BEGIN
|
|
INSERT INTO EventList
|
|
SELECT * FROM INSERTED
|
|
END
|
|
END
|
|
|
|
go
|
|
|
|
alter table EventList disable trigger trg_doActions;
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- registro versione...
|
|
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(353, GETDATE())
|
|
GO
|
|
|
|
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
|
GO |