Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. /* Implementare un event che sposti mensilmente le terapie terminate oltre sei mesi prima in una tabella di
  2. archivio ARCHIVIOTERAPIE mediante una stored procedure dump_therapies(). Salvare in ARCHIVIOERAPIE il
  3. codice fiscale del paziente, la patologia, il nome commerciale del farmaco, l'anno d'inizio, la durata
  4. della terapia in giorni e il numero totale di compresse assunte. L'event deve salvare in una tabella
  5. persistente la data dell'ultima volta in cui è andato in esecuzione e il numero di terapie archiviate */
  6.  
  7. CREATE TABLE ArchivioTerapie (
  8. Paziente VARCHAR(100) NOT NULL,
  9. Patologia VARCHAR(100) NOT NULL,
  10. Farmaco VARCHAR(100) NOT NULL,
  11. AnnoInizio DATE NOT NULL,
  12. DurataTerapia INTEGER,
  13. NumCompresse INTEGER,
  14. PRIMARY KEY (Paziente)
  15. ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
  16.  
  17. CREATE TABLE LastUpdate (
  18. Data DATE,
  19. NumTerapie INTEGER NOT NULL,
  20. PRIMARY KEY (Data, NumTerapie)
  21. ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
  22.  
  23.  
  24. DROP PROCEDURE IF EXISTS dump_therapies;
  25. DELIMITER $$
  26. CREATE PROCEDURE dump_therapies(OUT NumTerapie INT)
  27. BEGIN
  28. DECLARE finito INTEGER DEFAULT 0;
  29. DECLARE paziente VARCHAR(100) DEFAULT '';
  30. DECLARE patologia VARCHAR(100) DEFAULT '';
  31. DECLARE farmaco VARCHAR(100) DEFAULT '';
  32. DECLARE AnnoInizio INTEGER DEFAULT 2019;
  33. DECLARE durata INTEGER DEFAULT 0;
  34. DECLARE posologia INTEGER DEFAULT 0;
  35. DECLARE numCpr INTEGER DEFAULT 0;
  36.  
  37. DECLARE CursoreTerapie CURSOR FOR
  38. SELECT T.Paziente,
  39. T.Patologia,
  40. T.Farmaco,
  41. YEAR(T.DataInizioTerapia),
  42. DATEDIFF(DataFineTerapia, DataInizioTerapia) AS Durata,
  43. Posologia, -- Da moltiplicare con la durata
  44. T.DataEsordio,
  45. T.DataInizioTerapia
  46. FROM Terapia T
  47. WHERE PERIOD_DIFF( DATE_FORMAT(T.DataInizioTerapia, '%Y%m'),
  48. DATE_FORMAT(T.DataFineTerapia, '%Y%m')
  49. ) > 6;
  50.  
  51. DECLARE CONTINUE HANDLER FOR NOT FOUND SET finito = 1;
  52.  
  53. OPEN CursoreTerapie;
  54.  
  55. scan: LOOP
  56. FETCH CursoreTerapie INTO paziente, patologia, farmaco, AnnoInizio, durata, posologia, DataEsordio, DataInizioTerapia;
  57.  
  58. IF finito = 1 THEN
  59. LEAVE scan;
  60. END IF;
  61.  
  62. SET numCpr = posologia * durata;
  63. SET NumTerapie = NumTerapie + 1;
  64.  
  65. INSERT INTO ArchivioTerapie
  66. VALUES (paziente, patologia, farmaco, AnnoInizio, durata, numCpr);
  67.  
  68. DELETE T.*
  69. FROM Terapia T
  70. WHERE T.Paziente = paziente
  71. AND T.Patologia = patologia
  72. AND T.DataEsordio = DataEsordio
  73. AND T.Farmaco = farmaco
  74. AND T.DataInizioTerapia = DataInizioTerapia;
  75.  
  76. END LOOP scan;
  77.  
  78.  
  79. END $$
  80.  
  81. CREATE EVENT sposta ON SCHEDULE EVERY 1 MONTH
  82. DO
  83. BEGIN
  84. CALL dump_therapies(@NTerapie);
  85. INSERT INTO LastUpdate
  86. VALUES ( CURRENT_DATE, @NTerapie);
  87. END $$
  88. DELIMITER ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement