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

PostgreSQL Discussion :

INSERTion de rows issues d'un SELECT, le tout dans un trigger.


Sujet :

PostgreSQL

  1. #1
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut INSERTion de rows issues d'un SELECT, le tout dans un trigger.
    Bonjour,

    sur ma table_1, lors d'une insertion, je veux déclencher un trigger qui fera une insertion sur table_2. Cette dernière insertion prend ses valeurs depuis une table_3.
    Je suis tout neuf en postgreSQL et je veux juste faire des tests. Pour le moment, ma base est en SQLITE.

    Pour SQLITE, j'avais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER `trig_table_1_AINS` AFTER INSERT ON table_1 FOR EACH ROW
    BEGIN
    INSERT INTO table_2
    SELECT null, NEW.id_table_1, id_table_3 FROM table_3;
    END
    La table 2 est simple, elle a 3 colonnes. Je note toutes mes primary key avec la syntaxe id_nomDeLaTable. Sur le code ci-dessus, vous voyez que je fixe une colonne à null dans mon SELECT, le nut n'est pas d'insérer la valeur NULL mais de laisser le soin à SQLITE de mettre la bonne valeur tout seul.

    Je veux faire l'équivalent en postgreSQL mais je galère. Si je laisse le null, pg me dit que je peux pas insérer null. Si j'essaies de spécifier les colonnes de destination, je sais pas comment mettre le SELECT.

    Voilà le code pg que 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
    14
     
    CREATE OR REPLACE FUNCTION trig_table_1_AINS()
      RETURNS trigger AS
    $BODY$
    BEGIN
    INSERT INTO "table_2"
    SELECT null, NEW.id_table_1, "id_table_3 " FROM "table_3";
    RETURN NULL;
    END;
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION trig_table_1_AINS()
      OWNER TO myself;
    C'est peut-être peu important mais ma table_3 est une taille avec un nombre de lignes assez fixes (normalement, elle est remplie à la création et c'est tout).
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Une bonne habitude à prendre avec la commande INSERT INTO :
    Même si l'on est certain que la structure de la table ne changera pas, toujours préciser la liste des colonnes alimentées.
    Dans ton cas, quel est le type et les contraintes sur la première colonne de table_2 ?
    As-tu essayé comme cela ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO table_2
        (   col2
        ,   col3
        )
    SELECT  NEW.id_table_1
        ,   id_table_3 
    FROM    table_3
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    Oui oui j'ai testé en spécifiant le nom des colonnes de destination

    Si j'essaies de spécifier les colonnes de destination, je sais pas comment mettre le SELECT.
    Je viens de retester dans le doute, l'erreur est la suivante :

    ERROR: missing FROM-clause entry for table_3 at character XX
    XX est l'emplacement du SELECT visiblement.
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  4. #4
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    Bon, en fait c'est bon ça marche. J'avais un autre trigger qui ressemble beaucoup qui posait problème. Dans son select, il n'y avait pas les double quotes autour d'un nom de table (très pénible ça d'ailleurs).
    Je vais batailler maintenant pour insérer des quotes dans toutes mes requêtes.

    Au final, il faut spécifier les colonnes et on peut parfaitement omettre une colonne (celle de la primary key dans mon cas) dans le INSERT INTO.
    Merci pour ton aide, si j'avais pas écrit mon problème au clair je n'aurais rien vu.
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

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

Discussions similaires

  1. Trigger, insert en fonction d'un premier select
    Par tatane dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/03/2009, 02h18
  2. [MySQL] Insert sur un index de form select
    Par razorlok dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/11/2008, 14h23
  3. Export données issue d'une selection multiple
    Par olam37 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/07/2007, 16h26
  4. [MySQL] Pb d'insertion d'une valeur de champ select dans une Bdd
    Par Mimisator dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 20/10/2005, 18h51
  5. Insertion multiple à base de sous requête SELECT
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2005, 16h34

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