web-dev-qa-db-fra.com

Déclencheur MySQL avant vérification de la valeur d'insertion

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'

14
Bitmap

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
18
unutbu

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$$
5
galaxyAbstractor
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;
3
DEVEX