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 :
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;
//
ma ottengo il seguente errore :
codice:
ERROR 1415 (0A000): Not allowed to return a result set from a trigger
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...
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...