J'ai une table staff
avec une colonne office
. Actuellement, la colonne office
n'accepte pas les valeurs NULL. L'application persistant sur cette table a un bogue qui signifie que, lorsque le personnel n'a pas été affecté à un bureau, il essaie d'insérer une valeur NULL sur la table.
On m'a demandé d'utiliser un déclencheur pour intercepter l'insertion sur la table Staff
et vérifier si la valeur office
est NULL et la remplacer par la valeur N/A
.
Ci-dessous est ma tentative jusqu'à présent, mais avez error
pour essayer de l'implémenter. Toutes les idées sur la façon de résoudre ce problème.
CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
FOR EACH ROW BEGIN
IF (NEW.office IS NULL)
INSERT INTO Staff SET office="N/A";
END IF
END;
L'erreur:
Erreur de base de données MySQL: vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de 'INSERT INTO Staff SET office = "N/A"; FIN'
Tout d'abord, modifiez la table pour autoriser les valeurs NULL:
ALTER TABLE Staff MODIFY office CHAR(40) DEFAULT "N/A";
(Remplacez CHAR(40)
par ce qui est approprié.) Ensuite, vous pouvez utiliser comme déclencheur:
CREATE TRIGGER staffOfficeNullReplacerTrigger
BEFORE INSERT
ON Staff
FOR EACH ROW BEGIN
IF (NEW.office IS NULL) THEN
SET NEW.office = "N/A";
END IF
Cela ne devrait-il pas être quelque chose comme ça:
DELIMITER $$
CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
FOR EACH ROW BEGIN
IF (NEW.office IS NULL) THEN
INSERT INTO Staff(office) VALUES("N/A");
END IF;
END$$
CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
FOR EACH ROW BEGIN
IF (NEW.office IS NULL)
INSERT INTO Staff SET office="N/A";
END IF
; ajouter des points-virgules après END IF
END;