Advertisement
Guest User

Untitled

a guest
Feb 9th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. DROP FUNCTION IF EXISTS therapy_failures;
  2. DELIMITER $$
  3. CREATE FUNCTION therapy_failures(Cod VARCHAR(4),Farmaco VARCHAR(50))
  4. RETURNS VARCHAR(50) NOT DETERMINISTIC
  5. BEGIN
  6. declare settore varchar(50);
  7.  
  8. SELECT P.SettoreMedico into settore
  9. FROM Terapia T INNER JOIN Patologia P ON P.Nome = T.Patologia
  10. WHERE T.Paziente = Cod
  11. AND MONTH(T.DataInizioTerapia) = CURRENT_DATE() - INTERVAL 1 MONTH
  12. AND T.DataFineTerapia IS NOT NULL
  13. AND MONTH(T.DataFineTerapia) = MONTH(T.DataInizioTerapia)
  14. AND YEAR(T.DataFineTerapia) = YEAR(T.DataInizioTerapia)
  15. AND T.Farmaco = Farmaco
  16. AND NOT EXISTS ( SELECT * FROM Esordio E
  17. WHERE E.Patologia = T.Patologia
  18. AND E.Paziente = T.Paziente
  19. AND T.DataEsordio = E.DataEsordio
  20. AND E.DataGuarigione IS NOT NULL)
  21. GROUP BY T.Paziente,P.SettoreMedico
  22. HAVING count(*) > ALL(
  23. SELECT COUNT(*)
  24. FROM Terapia T1 INNER JOIN Patologia P1 ON P1.Nome = T1.Patologia
  25. WHERE T1.Paziente = Cod
  26. AND MONTH(T1.DataInizioTerapia) = CURRENT_DATE() - INTERVAL 1 MONTH
  27. AND T1.DataFineTerapia IS NOT NULL
  28. AND MONTH(T1.DataFineTerapia) = MONTH(T1.DataInizioTerapia)
  29. AND YEAR(T1.DataFineTerapia) = YEAR(T1.DataInizioTerapia)
  30. AND T1.Farmaco = Farmaco
  31. AND P1.SettoreMedico != p.SettoreMedico
  32. AND NOT EXISTS ( SELECT *
  33. FROM Esordio E
  34. WHERE E.Patologia = T1.Patologia
  35. AND E.Paziente = T1.Paziente
  36. AND T1.DataEsordio = E.DataEsordio
  37. AND E.DataGuarigione IS NOT NULL)
  38. GROUP BY T1.Paziente,P1.SettoreMedico
  39.  
  40. );
  41.  
  42. /* PER IL PAZIENTE FORNITO E PER OGNI SETTORE MEDICO, CONTO LE TERAPIE FATTE CON IL FARMACO FORNITO, FALLITE,
  43. OSSIA QUELLE CHE HANNO UN ESORDIO RELATIVO CON DATAGUARIGIONE A NULL */
  44.  
  45.  
  46. IF(Settore IS NULL) THEN /* SE NON E' STATO TROVATO ALCUN SETTORE NON RITORNA NULL E INTERROMPE L'ESECUZIONE */
  47. SIGNAL SQLSTATE '45000'
  48. SET MESSAGE_TEXT = "Nessun settore medico trovato";
  49. ELSE
  50. RETURN Settore; /* ALTRIMENTI RITORNO IL SETTORE */
  51. END IF;
  52.  
  53. END $$
  54. DELIMITER ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement