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

SQL Procédural MySQL Discussion :

Problème dans un trigger


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut Problème dans un trigger
    Bonjour.

    J'ai un souci : je veux que lorsque j'ajoute un enregistrement, calculer un MAX de plusieurs lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE regles (
    	idRegles INT PRIMARY KEY AUTO_INCREMENT,
    	materiel INT NOT NULL,
    	priorite INT,
    ) ENGINE = innoDB;
    Je me suis dit qu'un trigger ferait l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE TRIGGER TRIG_AJOUT_REGLE BEFORE INSERT ON regles FOR EACH ROW
    BEGIN	
    	SET new.priorite = MAX(priorite) FROM regles WHERE materiel = new.materiel;
    END
    Et bien sûr ça marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET new.priorite = MAX(priorite) FROM regles WHERE materiel = new.materiel;
    END' at line 3
    Quelqu'un a une piste ?
    D'avance merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    ton SET doit utiliser une sous-requête scalaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TRIGGER TRIG_AJOUT_REGLE BEFORE INSERT ON regles 
    FOR EACH ROW 
    SET new.priorite = ( SELECT MAX(priorite) FROM regles WHERE materiel = new.materiel);
    Par ailleurs, comme tu n'as qu'une instruction, le BEGIN... END est inutile.

  3. #3
    Membre confirmé
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut
    Merci c'est exactement ce que je cherchais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème dans un trigger
    Par ezzouine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/01/2013, 09h33
  2. Problème de droits d'éxécution dans un trigger
    Par Xavinou57 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 05/11/2009, 20h43
  3. Réponses: 2
    Dernier message: 21/07/2008, 07h49
  4. Problème avec les délimiteurs dans un trigger
    Par Invité dans le forum DB2
    Réponses: 4
    Dernier message: 01/05/2006, 22h53
  5. Calcul dans un triggers : problème du +
    Par eXiaNazaire dans le forum Oracle
    Réponses: 3
    Dernier message: 07/01/2005, 10h14

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