Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DROP PROCEDURE IF EXISTS discount_drug;
- DELIMITER $$
- CREATE PROCEDURE discount_drug(IN _s VARCHAR(45), IN _k INT)
- BEGIN
- -- Variabili per salvarmi valori intermedi della formula
- DECLARE maxT INT;
- DECLARE somma DOUBLE;
- DECLARE quanti INT;
- DROP TEMPORARY TABLE IF EXISTS Temp;
- CREATE TEMPORARY TABLE Temp AS (
- SELECT T.Farmaco,
- COUNT(*) AS numTerapie,
- SQRT(1/COUNT(*)) AS termineSomma
- FROM Terapia T
- INNER JOIN Patologia P
- ON T.Patologia = P.Nome
- WHERE (YEAR(T.DataInizioTerapia) = '2015'
- OR YEAR(T.DataFineTerapia) = '2015')
- AND P.SettoreMedico = _s
- GROUP BY T.Farmaco
- ORDER BY numTerapie DESC
- LIMIT _k
- );
- -- Vedo se il numero k che mi ha dato è valido
- SET quanti = (SELECT COUNT(*) FROM Temp);
- IF quanti < _k THEN
- SIGNAL SQLSTATE '45000'
- SET MESSAGE_TEXT = 'k non valido, inserire numero piu piccolo';
- END IF;
- -- Massimo numero di terapie
- SET maxT = (SELECT MAX(numTerapie) FROM Temp);
- -- Tutta la parte nella parentesi della formula
- SET somma = 1 + _k * (SELECT SUM(termineSomma) FROM Temp);
- -- Applico lo sconto ai farmaci
- UPDATE Farmaco F
- INNER JOIN Temp T
- ON F.NomeCommerciale = T.Farmaco
- SET F.Costo = F.Costo - T.numTerapie / maxT * somma;
- END$$
- DELIMITER ;
Add Comment
Please, Sign In to add comment