Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Implementare un event che sposti mensilmente le terapie terminate oltre sei mesi prima in una tabella di
- archivio ARCHIVIOTERAPIE mediante una stored procedure dump_therapies(). Salvare in ARCHIVIOERAPIE il
- codice fiscale del paziente, la patologia, il nome commerciale del farmaco, l'anno d'inizio, la durata
- della terapia in giorni e il numero totale di compresse assunte. L'event deve salvare in una tabella
- persistente la data dell'ultima volta in cui è andato in esecuzione e il numero di terapie archiviate */
- CREATE TABLE ArchivioTerapie (
- Paziente VARCHAR(100) NOT NULL,
- Patologia VARCHAR(100) NOT NULL,
- Farmaco VARCHAR(100) NOT NULL,
- AnnoInizio DATE NOT NULL,
- DurataTerapia INTEGER,
- NumCompresse INTEGER,
- PRIMARY KEY (Paziente)
- ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
- CREATE TABLE LastUpdate (
- Data DATE,
- NumTerapie INTEGER NOT NULL,
- PRIMARY KEY (Data, NumTerapie)
- ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
- DROP PROCEDURE IF EXISTS dump_therapies;
- DELIMITER $$
- CREATE PROCEDURE dump_therapies(OUT NumTerapie INT)
- BEGIN
- DECLARE finito INTEGER DEFAULT 0;
- DECLARE paziente VARCHAR(100) DEFAULT '';
- DECLARE patologia VARCHAR(100) DEFAULT '';
- DECLARE farmaco VARCHAR(100) DEFAULT '';
- DECLARE AnnoInizio INTEGER DEFAULT 2019;
- DECLARE durata INTEGER DEFAULT 0;
- DECLARE posologia INTEGER DEFAULT 0;
- DECLARE numCpr INTEGER DEFAULT 0;
- DECLARE CursoreTerapie CURSOR FOR
- SELECT T.Paziente,
- T.Patologia,
- T.Farmaco,
- YEAR(T.DataInizioTerapia),
- DATEDIFF(DataFineTerapia, DataInizioTerapia) AS Durata,
- Posologia, -- Da moltiplicare con la durata
- T.DataEsordio,
- T.DataInizioTerapia
- FROM Terapia T
- WHERE PERIOD_DIFF( DATE_FORMAT(T.DataInizioTerapia, '%Y%m'),
- DATE_FORMAT(T.DataFineTerapia, '%Y%m')
- ) > 6;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET finito = 1;
- OPEN CursoreTerapie;
- scan: LOOP
- FETCH CursoreTerapie INTO paziente, patologia, farmaco, AnnoInizio, durata, posologia, DataEsordio, DataInizioTerapia;
- IF finito = 1 THEN
- LEAVE scan;
- END IF;
- SET numCpr = posologia * durata;
- SET NumTerapie = NumTerapie + 1;
- INSERT INTO ArchivioTerapie
- VALUES (paziente, patologia, farmaco, AnnoInizio, durata, numCpr);
- DELETE T.*
- FROM Terapia T
- WHERE T.Paziente = paziente
- AND T.Patologia = patologia
- AND T.DataEsordio = DataEsordio
- AND T.Farmaco = farmaco
- AND T.DataInizioTerapia = DataInizioTerapia;
- END LOOP scan;
- END $$
- CREATE EVENT sposta ON SCHEDULE EVERY 1 MONTH
- DO
- BEGIN
- CALL dump_therapies(@NTerapie);
- INSERT INTO LastUpdate
- VALUES ( CURRENT_DATE, @NTerapie);
- END $$
- DELIMITER ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement