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 ;

Rispondi quotando
