Salve a tutti, sto facendo un database di una clinica veterinaria per un esame all'università. Ho provato ad inserire questa procedura nel mio database, quando però la chiamo non fa quello che dovrebbe: Vorrei che per ogni farmaco prescritto all'animale, il cui id è il parametro input della procedura, tale che la data_fine o è null o è futura (con data_fine intendo la data fino alla quale l'animale deve assumere il farmaco), se esso è presente in clinica in quantità inferiore a 5 confezioni, si aggiungono dieci record nella tabella FarmacoFisico (che rappresenta le confezioni presenti in clinica dei farmaci ) rappresentanti 10 confezioni di quel farmaco. Questo deve avvenire per tutti i farmaci prescritti all'animale che attualmente assume. La mia Procedura esegue tutto ciò però solo per il primo farmaco prescritto che l'animale attualmente assume e non lo fa per tutti gli altri. Non riesco a capire dov'è il problema http://www.iprogrammatori.it/forum-p...s/icon_sad.gif
Posto di seguito il Codice:
codice:
DELIMITER //
DROP PROCEDURE IF EXISTS aggiungi_Farmaco //
CREATE PROCEDURE aggiungi_Farmaco(IN animale INTEGER)
BEGIN
DECLARE Codice VARCHAR(30);
DECLARE i, eof INT DEFAULT 0;
DECLARE cfarmaco CURSOR FOR SELECT P.Codice_farmaco
FROM Prescrizione P
WHERE P.Id_animale = animale AND (P.Data_fine IS NULL OR P.Data_fine >= CURDATE());
DECLARE CONTINUE HANDLER FOR NOT FOUND SET eof = 1;
# la funzione contatore ritorna l'id + grande della tabella FarmacoFisico incrementato di 1
SET @Id = contatore();
OPEN cfarmaco;
read_loop: LOOP
FETCH cfarmaco INTO Codice;
IF eof = 1 THEN
LEAVE read_loop;
END IF;
#memorizzo la quantità di confezioni presenti in clinica del farmaco corrispondente
SET @QuantitaFarmaco = (SELECT COUNT(*)
FROM FarmacoFisico
WHERE Codice_farmaco = Codice);
IF @QuantitaFarmaco < 5 THEN
WHILE i < 10 DO
INSERT INTO FarmacoFisico (Id, Codice_farmaco) VALUES (@Id, Codice);
SET i = i + 1;
SET @Id = @Id + 1;
END WHILE;
END IF;
END LOOP;
CLOSE cfarmaco;
END //
DELIMITER ;