· 6 years ago · Sep 08, 2019, 10:24 AM
1drop procedure if exists dump_therapies;
2delimiter $$
3create procedure dump_therapies()
4begin
5 -- Poichè faccio operazioni dml dichiaro un handler in caso di errore
6 declare exit handler for sqlexception
7 begin
8 rollback;
9 select "Si è verificato un errore durante lo spostamento delle terapie in archivio, spostamento annullato";
10 end;
11
12 drop temporary table if exists _TerapieTarget;
13 create temporary table _TerapieTarget
14 select T.*, -- Per utilizzare la chiave primaria
15 datediff(T.DataFineTerapia, T.DataInizioTerapia) as NumGiorni,
16 T.Posologia * datediff(T.DataFineTerapia, T.DataInizioTerapia) as NumCompresse
17 from Terapia T
18 where T.DataFineTerapia is not null -- sanity check because mysql fa schifo
19 and T.DataFineTerapia + interval 6 month < current_date; -- Terminate da > 6 mesi
20 -- Variabili di info
21 set @numTerapieArchiviate = (select count(*) from _TerapieTarget);
22 -- Tabella di info
23 create table if not exists InfoEventArchivioTerapie (
24 DataUltimaEsecuzione date,
25 NumTerapieArchiviate int
26 ) engine=InnoDB default charset=latin1;
27 -- Elimino eventuali info già presenti
28 truncate table InfoEventArchivioTerapie;
29 -- Inserisco le ultime info
30 insert into InfoEventArchivioTerapie
31 select current_date, @numTerapieArchiviate;
32
33 create table if not exists ArchivioTerapie (
34 Paziente varchar(100),
35 Patologia varchar(100),
36 Farmaco varchar(100),
37 AnnoInizio int,
38 Durata int,
39 NumCompresseAssunte int
40 ) engine=InnoDB default charset=latin1;
41 -- Sposto in archivio le terapie target:
42 -- 1) Inserimento in archivio
43 insert into ArchivioTerapie
44 select Paziente, Patologia, Farmaco, year(DataInizioTerapia), NumGiorni, NumCompresse
45 from _TerapieTarget TT;
46 -- 2) Cancello le row originali
47 delete T.* from Terapia T natural join _TerapieTarget TT;
48
49end $$
50delimiter ;
51
52drop event if exists ArchiviaTerapiaVecchie;
53
54create event ArchiviaTerapiaVecchie
55on schedule every 1 month
56do call dump_therapies();