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 :

Insertion données avec un trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Insertion données avec un trigger
    Bonjour à tous,

    Je cherche avec un trigger à insérer dans une table "vue" les nouvelles données d'une table "produits" reliée par une clé étrangère à une autre table "tarifs".
    Je n'ai pas forcément de valeurs reliées dans "tarifs".
    Mon trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TRIGGER after_insert_produits AFTER INSERT
    		ON produits FOR EACH ROW
    		BEGIN
    			INSERT INTO vue
    			SELECT *
    			FROM produits
    			WHERE pdt_id=NEW.pdt_id;
    		END |
    Cela provoque l'erreur : #1136 Column count doesn't match value count.
    Je pense cela vient du fait que je n'ai pas de données "tarifs" (même si les champs ont une valeur par défaut).
    Comment puis-je créer mon trigger pour pouvoir insérer un produit sans tarif ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Le problème vient plutôt du fait que votre requête select * from produit a sûrement un nombre de colonnes différent de la table "vue".


    D'une manière générale, il faut proscrire l'utilisation des select * lors des développements en sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO ma_table (col1, col2, col3)
    select ma_col2, ma_col5, ma_col8 from ma_table2

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton retour.

    Je suis d'accord pour l'utilisation du select * mais j'ai besoin de tous les champs dans la table "vue". De plus ces champs peuvent changer.

    Sinon, j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO vue
    SELECT *
    FROM produits,tarifs
    WHERE pdt_id=NEW.pdt_id;
    Mais là bien sûr il prend n'importe quelle valeur de "tarifs".

    Est-il possible de concatener les choses pour avoir la liste des champs "produits" & "tarifs" et que les valeurs de "tarifs" utilisées soit celles par défaut (vide donc).
    Du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO vue
    SELECT *
    FROM produits
    WHERE pdt_id=NEW.pdt_id
    +
    SELECT *
    FROM tarifs
    WHERE tarif_id=0
    ;

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Je suis d'accord pour l'utilisation du select * mais j'ai besoin de tous les champs dans la table "vue". De plus ces champs peuvent changer.
    Que vous ayez besoin de renseigner toutes les colonnes de la table "vue", ok mais ca ne change rien au problème initial.

    Il faut que le nombre de colonnes, ainsi que le type des colonnes, du sous-select corresponde aux colonne de la table cible d'insertion.


    De plus si la structure de la table "VUE" est amenée à changer, il faudra impacter les requêtes de vos triggers en conséquence.


    Pour votre 2eme question je n'ai pas compris, il faudrait un exemple.

Discussions similaires

  1. [MySQL] Insertion données avec une requête préparée
    Par Mikma dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/05/2013, 21h59
  2. Empêcher l'insertion des données avec un trigger
    Par hazmza dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 24/06/2010, 16h24
  3. Insertion données avec contrainte non respectée
    Par yoyostras dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/05/2008, 16h20
  4. Supprimer des données avec un trigger
    Par engi dans le forum SQL
    Réponses: 3
    Dernier message: 09/04/2008, 15h25
  5. SQL Server 2005 - ETL - Insertion données avec vérification.
    Par Mailgifson dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/12/2007, 12h22

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