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 ;