mi serve un trigger che prima che venga inserita una riga nella tabella verifichi l'integrità dei dati da un'altra tabella esterna, ovvero, prendiamo per esempio le seguenti:
codice:CREATE TABLE Officina ( IDof INT(7) primary key, gestioneMotorini ENUM('si','no') not null, indirizzo VARCHAR(30) ); CREATE TABLE Veicolo ( IDve INT(5) primary key, tipo ENUM('auto','motorino') not null, officina INT(7), FOREIGN KEY (officina) REFERENCES Officina(IDof) );
vorrei che prima di inserire/aggiornare una riga nella tabella Veicolo venisse verificato che l'officina che viene impostata non solo esista(foreignkey) ma che sia anche abilitata a gestire il veicolo in oggetto, ovvero se il veicolo è un motorino e l'officina che si inserisce non gestisce motorini l'inserimento/aggiornamento viene rifiutato
ho quindi pensato a una cosa del genere :
ma ottengo il seguente errore :codice:DELIMITER // CREATE TRIGGER VerificaOfficinaBI BEFORE INSERT ON Veicolo FOR EACH ROW BEGIN DECLARE abilitazioneOf CHAR(2); SELECT gestioneMotorini FROM Officina WHERE IDof=NEW.officina; SET abilitazioneOf=gestioneMotorini; IF NEW.tipo='motorino' AND abilitazioneOf!='si' THEN SET NEW.tipo=null; END IF; END; //
non sò come far "leggere" e poi "memorizzare" un valore da una tabella esterna in una variabile per effettuare un confronto, inoltre il parametro OLD non è valido nel comando INSERT, quindi vorrei sapere almeno se stò tentando qualcosa di impossibile...codice:ERROR 1415 (0A000): Not allowed to return a result set from a trigger
nel caso possa funzionare potreste gentilmente correggermi la sintassi di questo esempio così che possa costruirvi sopra il trigger funzionante al mio caso? stò leggendo da giorni la sintassi dei trigger e delle stored functions ma ormai il tempo stringe e da solo non ci riesco...
![]()

Rispondi quotando