Ho 2 tabelle aventi la seguente struttura:
codice:
mysql> describe feedbackVenditore;
+---------------+--------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------------------------------+------+-----+---------+-------+
| Id_Oggetto | int(11) | NO | PRI | NULL | |
| Id_Venditore | varchar(20) | NO | | NULL | |
| Id_Acquirente | varchar(20) | NO | | NULL | |
| Feedback | enum('Positivo','Neutro','Negativo') | NO | | NULL | |
| Commento | varchar(255) | YES | | NULL | |
+---------------+--------------------------------------+------+-----+---------+-------+
5 rows in set (0.26 sec)
+---------------+--------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------------------------------+------+-----+---------+-------+
| Id_Oggetto | int(11) | NO | PRI | NULL | |
| Id_Acquirente | varchar(20) | NO | | NULL | |
| Id_Venditore | varchar(20) | NO | | NULL | |
| Feedback | enum('Positivo','Neutro','Negativo') | NO | | NULL | |
| Commento | varchar(255) | YES | | NULL | |
+---------------+--------------------------------------+------+-----+---------+-------+
Praticamente voglio creare un trigger sulla tabella FeedbackAcquirente che fà la seguente cosa:
Se provo ad inserire un record nella tabella FeedbackAcquirente controlla se nella tabella FeedbackVenditore è presente un record avendte il campo Id_Oggetto uguale al campo Id_Oggetto che stò tentando di inserire nella tabella FeedbackAcquirente.
Se c'è allora il nuovo record viene inserito in FeedbackAcquirente, altrimenti non viene inserito (e magari fà comparire una scritta sul prompt di MySql...ma questa cosa è opzionale)
Io ho iniziato a scrivere il codice ma ad un certo punto mi sono impallato:
codice:
DELIMITER $$
CREATE TRIGGER Check_FeedBack_Trg
BEFORE INSERT ON FeedbackAcquirente /* Esegue il trigger prima dell'inserzione di un record in FeedbackAcquirente */
FOR EACH ROW
BEGIN
DECLARE contatore INTEGER; /* Dichiaro una variabile contatore intera */
/* Mettre dentro contatore il numero di record presenti in FeedbackVenditore il cui campo Id_Oggetto ha lo stesso
valore del campo Id_Oggetto del record che si stà tentando di inserire in FeedbackAcquirente */
SELECT COUNT(*) INTO contatore FROM FeedbackVenditore WHERE NEW.Id_Oggetto = FeedBackVenditore.Id_Oggetto;
/* Se il contatore è diverso da 1 vuol dire che non è stato ancora lasciato il feedback dal venditore percui lanciamo
l'errore */
IF contatore <> 1 THEN
CALL Operazione_non_permessa()
Praticamente se la condizione della IF è vera significa che il nuovo record non deve essere inserito nella tabella FeedbackAcquirente....ho messo una generica CALL Operazione_non_permessa() al posto della quale dovrei metterci la corretta istruzione per dirgli di non inserire il record...tranne che non ho la minima idea di quale sia e non riesco a trovarla sul manuale...qualcuno mi sà dare una manina?
Grazie
Andrea