PDA

View Full Version : [MySql] Trigger che si inchioda, perchè?


Trigger2009
25-06-2009, 20:17
Ciao,

ho una tabella INSERZIONE avente la seguente struttura:


Allora ho creato un trigger avente questo codice:

mysql> describe inserzione;
+-----------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-----------------------+------+-----+---------+----------------+
| Id_Oggetto | int(11) | NO | PRI | NULL | auto_increment |
| Titolo | varchar(60) | NO | MUL | NULL | |
| Descrizione | text | YES | | NULL | |
| Costo_Base | decimal(6,2) | YES | | NULL | |
| Compralo_Subito | decimal(6,2) | YES | | NULL | |
| Scadenza | datetime | YES | MUL | NULL | |
| Stato_Oggetto | enum('nuovo','usato') | YES | | NULL | |
| Id_Venditore | varchar(20) | NO | | NULL | |
| Id_Categoria | varchar(30) | NO | | NULL | |
+-----------------+-----------------------+------+-----+---------+----------------+


Come potete vedere ci sono 2 campo decimal (Costo_Base e Compralo_Subito), un utente sbadato potrebbe inserire un valore negativo, voglio che questa eventualità non possa accadere, allora ho creato un trigger che inserisce sempre nella tabella i valori assoluti di tali 2 campi, così se un utente mette ad esempio -2,73 nella tabella compare 2,73.

Ecco il codice del trigger:


DELIMITER $$

CREATE TRIGGER Check_Inserzione_Trg
BEFORE INSERT ON inserzione /* Esegue il trigger prima dell'inserzione di un record in FeedbackAcquirente */
FOR EACH ROW

BEGIN

INSERT INTO inserzione (Id_Oggetto, Titolo, Descrizione, Costo_Base, Compralo_Subito, Scadenza, Stato_Oggetto, Id_Venditore, Id_Categoria)
VALUES(NEW.Id_Oggetto, NEW.Titolo, NEW.Descrizione, ABS(NEW.Costo_Base), ABS(NEW.Compralo_Subito), NEW.SCadenza, NEW.Stato_Oggetto, NEW.Id_Venditore, NEW.Id_Categoria);

END $$


DELIMITER ;


MySql lo accetta...però se provo ad inserire un'inserzione mi và in errore:

mysql> INSERT INTO INSERZIONE
-> VALUES
-> (NULL, 'Lettore MP3 Creative', 'Lettore MP3 da 8 Gb', -3, -150, '2009-06-28 17:30:00', 'nuovo', 'Fotografo84', 4);;
ERROR 1442 (HY000): Can't update table 'inserzione' in stored function/trigger because it is already used by statement which
ed this stored function/trigger.
ERROR:
No query specified

Da cosa potrebbe dipendere? Qualche soluzione?

Tnx

CwNd
25-06-2009, 20:28
Cancella tutta quella query li e scrivi solo:


SET NEW.Costo_Base = ABS(NEW.Costo_Base);
SET NEW.Compralo_Subito = ABS(NEW.Compralo_Subito);


Ciao

Trigger2009
25-06-2009, 22:59
Cancella tutta quella query li e scrivi solo:


SET NEW.Costo_Base = ABS(NEW.Costo_Base);
SET NEW.Compralo_Subito = ABS(NEW.Compralo_Subito);


Ciao

Perfetto grazie mille :)