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

 MySQL Discussion :

Trigger after insert


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut Trigger after insert
    Bonjour,
    je débute en pl/sql du coup je bloque dès la première manipulation .
    Donc mon but est que pour chaque ajout dans la table A, qui contient (id,nom,prenom,date), je doit indiquer dans la table B, qui contient (id,nbr,date), le nombre de personnes inscrits pour chaque date.

    Exemple:
    Dans la table A j'ai deux personnes qui se sont inscrites le 20/08/2013 je retrouve dans la table B nbr=2 pour la date du 20/08/2013

    le trigger intervient dès que j'ajoute une personne,comme pour la date du 20/08/2013 si j'en ajoute une personne le nbr passe a 2, sinon si la date n'existe pas encore je crée une nouvelle ligne .

    Merci d'avance j’espère que mon problème est bien clair.

    Voici mon essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE TRIGGER `ajout_dans_B` AFTER INSERT 
    ON `A`
    FOR EACH ROW
    DECLARE 
    	DATE_ajout date
    BEGIN
    DATE_ajout := NEW.date_A;
    SELECT INTO TST date_B from `B` WHERE date_B like DATE_ajout ;
    if found then UPDATE B SET nbr=nbr+1 where date_B=NEW.date_A ;  
    else INSERT INTO `B` VALUES ('','1',DATE_ajout) END IF;
    END;

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    C'est plutôt du mysql, non ?

  3. #3
    Membre régulier
    Femme Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    C'est plutôt du mysql, non ?
    j'aurai dit PL/SQL avec Mysql
    j'ai fait un copier/coller de tout mon code de test j'ai besoin de la partie trigger que j'ai appris dans des tutos PL/SQL donc je me suis dit que c'est du pl/sql

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    Vous confondez un peu tout là

    Voir ici et ici si cela vous aidera plus !

    @+
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le PL/SQL est un langage, MySQL est un SGBD.
    Le premier ne fonctionne pas sur le second.

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Essayez avec ON DUPLICATE KEY (il faut une contrainte d'unicité sur la colonne date_b pour pouvoir accéder à la partie UPDATE)
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    delimiter $$
    CREATE TRIGGER `ajout_dans_B` AFTER INSERT ON `A`
    FOR EACH ROW
    BEGIN
      INSERT INTO B (nbr, date_b) VALUES (1,NEW.date_A)
          on duplicate key 
      update set nbr = nbr + 1;
    END $$
    delimiter ;

  7. #7
    Membre régulier
    Femme Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    Merci pour vos réponses j'ai un peu essayé à faire un peu de tout j'ai même fait un autre trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TRIGGER `ajout_dans_B` AFTER INSERT ON A
    DECLARE
    	cherche INT NULL ;
    BEGIN
    	SELECT (COUNT *) INTO cherche FROM B WHERE date_A=date_B
    	IF cherhche=1 THEN UPDATE B SET nbr=nbr+1 WHERE date_A=date_B
    	ELSE INSERT INTO B VALUES ('','1',date_A);
    END;
    mais ca ne marche toujours pas
    voiçi les erreurs
    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 'DECLA
    RE
    cherche INT NULL' at line 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 'SELEC
    T (COUNT *) INTO cherche FROM B WHERE date_A=date_B
    IF cherhche=1 THEN UPD' at line 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 'END'
    at line 1

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

Discussions similaires

  1. Trigger after insertion pas validée
    Par guigeek dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/12/2006, 13h37
  2. Trigger after insertion pas validée
    Par guigeek dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/12/2006, 14h23
  3. Un Trigger After INSERT peut-il empêcher l'INSERT ?
    Par cian2006 dans le forum Oracle
    Réponses: 3
    Dernier message: 13/09/2006, 17h27
  4. Trigger after insert, sans each row, possible ??
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2006, 15h18

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