167 lines
5.3 KiB
Transact-SQL
167 lines
5.3 KiB
Transact-SQL
create table LogUpdateDb(
|
|
Versione int not null constraint PK_LogUpdateDb primary key,
|
|
Data datetime
|
|
)
|
|
go
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
alter table AnagraficaStati add
|
|
Priorita int
|
|
go
|
|
|
|
exec sp_addextendedproperty 'MS_Description', 'livello di precedenza (il minore precede e sovrascrive i livelli successivi)', 'SCHEMA', 'dbo', 'TABLE', 'AnagraficaStati', 'COLUMN', 'Priorita'
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
alter TRIGGER UpdDiarioDiBordo
|
|
ON DiarioDiBordo
|
|
FOR INSERT
|
|
AS
|
|
|
|
/* dichiaro variabili */
|
|
DECLARE @IdxMacchina NVARCHAR(50)
|
|
DECLARE @InizioStato DATETIME
|
|
DECLARE @soloMinuti FLOAT
|
|
DECLARE @IdxStatoOld INT
|
|
DECLARE @IdxStatoNew INT
|
|
DECLARE @semaforoOld VARCHAR(50)
|
|
DECLARE @semaforoNew VARCHAR(50)
|
|
DECLARE @prioritaOld INT
|
|
DECLARE @prioritaNew INT
|
|
|
|
/* recupero valori x inserting */
|
|
SET @IdxMacchina = ( SELECT i.IdxMacchina FROM inserted i )
|
|
SET @InizioStato = ( SELECT i.InizioStato FROM inserted i )
|
|
SET @soloMinuti = ( SELECT DATEDIFF(n, InizioStato, @InizioStato) FROM DiarioDiBordo WHERE (FineStato IS NULL) AND (IdxMacchina = @IdxMacchina) AND (InizioStato <>@InizioStato) )
|
|
/* recupero dati x stati e semafori/priorità x eventuale update a ritroso dello stato */
|
|
SET @IdxStatoOld = ( SELECT IdxStato FROM DiarioDiBordo WHERE (FineStato IS NULL) AND (IdxMacchina = @IdxMacchina) AND (InizioStato <>@InizioStato) )
|
|
SET @IdxStatoNew = ( SELECT i.IdxStato FROM inserted i )
|
|
|
|
/* ------------------------------------------------------------------------------------------------------------ */
|
|
/* CONTROLLO SE NECESSARIO AGGIORNARE STATO PRECEDENTE guardando le famiglie "semaforiche" e la priorità dello stato vecchio e nuovo*/
|
|
/* faccio i controlli SOLO se lo stato è cambiato da vecchio a nuovo */
|
|
IF (@IdxStatoOld <> @IdxStatoNew)
|
|
BEGIN
|
|
SET @semaforoOld = ( SELECT Semaforo FROM AnagraficaStati WHERE IdxStato = @IdxStatoOld )
|
|
SET @semaforoNew = ( SELECT Semaforo FROM AnagraficaStati WHERE IdxStato = @IdxStatoNew )
|
|
|
|
/* questo controllo ed eventuale update lo faccio SOLO se i semafori corrispondono (stessa "famiglia" */
|
|
IF (@semaforoOld = @semaforoNew)
|
|
BEGIN
|
|
SET @prioritaOld = ( SELECT Priorita FROM AnagraficaStati WHERE IdxStato = @IdxStatoOld )
|
|
SET @prioritaNew = ( SELECT Priorita FROM AnagraficaStati WHERE IdxStato = @IdxStatoNew )
|
|
|
|
/* controlo se la priorità nuova sia + bassa della precedente e nel caso sovrascrivo */
|
|
IF (@prioritaNew < @prioritaOld)
|
|
BEGIN
|
|
/* in questo caso imposto lo stato precedente come quello nuovo */
|
|
UPDATE DiarioDiBordo
|
|
SET IdxStato = @IdxStatoNew
|
|
WHERE (FineStato IS NULL) AND (IdxMacchina = @IdxMacchina) AND (InizioStato <> @InizioStato)
|
|
END
|
|
END
|
|
END
|
|
/* ------------------------------------------------------------------------------------------------------------ */
|
|
|
|
/* Chiudo lo stato precedente */
|
|
UPDATE DiarioDiBordo
|
|
SET FineStato = @InizioStato, DurataMinuti = @soloMinuti + CAST((DATEDIFF(ms, DATEADD(n,@soloMinuti,InizioStato), @InizioStato)) AS FLOAT)/60000
|
|
WHERE (FineStato IS NULL) AND (IdxMacchina = @IdxMacchina) AND (InizioStato <> @InizioStato)
|
|
|
|
/* Aggiorno tabella stato corrente della macchina */
|
|
DELETE FROM StatoMacchine
|
|
WHERE IdxMacchina = @IdxMacchina
|
|
|
|
INSERT INTO StatoMacchine(IdxMacchina, IdxStato, InizioStato, Value, MatricolaKanban, KanbanCode, TempoCicloBase, PzPalletProd)
|
|
SELECT IdxMacchina, IdxStato, InizioStato, Value, MatricolaKanban, KanbanCode, TempoCicloBase, PzPalletProd
|
|
FROM inserted
|
|
|
|
/* aggiorno dati kanban DiarioDiBordo... */
|
|
UPDATE DiarioDiBordo
|
|
SET KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
|
|
FROM Kanban AS k INNER JOIN
|
|
DiarioDiBordo ON k.MatricolaKanban = DiarioDiBordo.MatricolaKanban
|
|
WHERE (DiarioDiBordo.TempoCicloBase IS NULL)
|
|
|
|
/* aggiorno dati kanban statoMacchine... */
|
|
UPDATE StatoMacchine
|
|
SET KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
|
|
FROM Kanban AS k INNER JOIN
|
|
StatoMacchine ON k.MatricolaKanban = StatoMacchine.MatricolaKanban
|
|
WHERE (StatoMacchine.TempoCicloBase IS NULL)
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=1
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=2
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=3
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=4
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=3
|
|
WHERE IdxStato=5
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=6
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=7
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=8
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=9
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=10
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=11
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=4
|
|
WHERE IdxStato=12
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=13
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=1
|
|
WHERE IdxStato=14
|
|
UPDATE dbo.AnagraficaStati SET
|
|
Priorita=5
|
|
WHERE IdxStato=15
|
|
go
|
|
|
|
commit transaction
|
|
go
|
|
|
|
|
|
|
|
|
|
|
|
-- registro versione...
|
|
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(10, GETDATE())
|
|
GO |