IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Question trigger pour tester une ancienne valeur


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2014
    Messages : 85
    Points : 143
    Points
    143
    Par défaut Question trigger pour tester une ancienne valeur
    Bonjour,

    je cherche un moyen de faire un trigger qui va vérifier une valeur contenue dans une table avant de valider un INSERT.

    Dans mon exercice j'ai une colonne contenant ID_Fonction dans ma table Employe.

    Un employé ne peut occuper qu'une fonction donc le but du trigger est de valider l'opération ou la refuser si on veut faire un INSERT dans la colonne ID_Fonction.
    Bien que ma colonne ne puisse contenir qu'une valeur, je voudrais quand même résoudre ce problème par un trigger.

    Donc pour le moment j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DROP TRIGGER IF EXISTS t_before_insert;
    DELIMITER |
    CREATE TRIGGER t_before_insert
    BEFORE INSERT
    ON Employe
    FOR EACH ROW
    BEGIN
      IF NEW.ID_Fonction IS NOT NULL
      THEN INSERT INTO Erreur VALUES ('Occupe déjà une fonction'); -- L'erreur est dans une table erreur avec un champ unique
      END IF;
    END|
    DELIMITER ;
    Avec ce trigger lors d'un INSERT d'une valeur, si la valeur est NULL je reçois ce msg: Error Code: 1136. Column count doesn't match value count at row 1

    En fait, lorsque je regarde le trigger, la valeur NEW.ID_Foncion n'est pas NULL ce qui est logique mais comment tester si l'ancienne valeur était différence de NULL?

    Merci pour votre aide

    Ersch

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    1) la syntaxe des déclencheur est propre à chaque editeur. Or vous n'avez pas indiqué quel SGBDR vous utilisiez.
    2) vous êtes prié de respecter la charte de postage afin que l'on puisse vous aide. Postez au moins le DDL des tables en jeu ! http://www.developpez.net/forums/a69...gage-sql-lire/
    3) par nature les opérations dans les SGBDR étant ensembliste et concurrentes, le fait de créer votre trigger FOR EACH ROW s'oppose à la résolution de votre problème qui de toute manière ne peut être traité en dehors d'un code ensembliste.

    A +

Discussions similaires

  1. Question trigger pour tester une ancienne valeur
    Par Ersch dans le forum Débuter
    Réponses: 1
    Dernier message: 29/04/2015, 15h59
  2. [XL-2000] Formule à utiliser pour tester une fourchette de valeur
    Par rene2 dans le forum Excel
    Réponses: 12
    Dernier message: 26/04/2011, 04h24
  3. trigger pour modifier une valeur après création du record
    Par awalter1 dans le forum Administration
    Réponses: 5
    Dernier message: 07/03/2011, 19h41
  4. Réponses: 1
    Dernier message: 08/06/2007, 10h12
  5. trigger pour tester une clé primaire
    Par keumlebarbare dans le forum PL/SQL
    Réponses: 3
    Dernier message: 15/04/2007, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo