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 :

Besoin d'aide pour la création d'un trigger


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Besoin d'aide pour la création d'un trigger
    Bonjour,
    j'ai besoin de mettre en place un trigger dans une base de données Postgres/postgis. J'ai longuement parcouru le forum en quête d'explication sur la mise en place et l'utilisation du trigger. Je précise je suis débutant !
    J'aurai donc besoin d'un coup de main s'il vous plaît.

    J'ai une table contenant des descriptifs de bâtiments en plusieurs langues. Elle est mise à jour (en nocturne) quotidiennement. Parfois les traductions n'existent pas. J'ai donc besoin de remplacer un champ vide par un champ contenant la valeur.

    Objet : Si "nom_structure_en" est vide alors remplir avec "nom_structure_fr"

    Voici où j'en suis pour l'instant au vu de ce que j'ai compris dans les différents posts et/aide de postgres.

    Tout d'abord la définition des paramètres :

    Base : base
    Table : TABLE
    Champ : nom_structure_en
    nom de la procédure (fonctin sql) : trig_desc_null
    nom du trigger : maj_nom_structure_en_vide


    La création du trigger "maj_nom_structure_en_vide" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TRIGGER maj_nom_structure_en_vide
    AFTER INSERT OR UPDATE OR DELETE
    ON base.TABLE
    FOR EACH ROW EXECUTE PROCEDURE trig_desc_null();

    La fonction sql qui m’intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE base.TABLE SET base.TABLE.nom_structure_en = base.TABLE.nom_structure_fr
    WHERE (((base.TABLE.nom_structure_en) Is Null));

    La procédure "trig_desc_null" reprenant la fonction sql précédante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE FUNCTION trig_desc_null() RETURNS trigger AS $maj_nom_structure_en_vide$
        BEGIN
            -- Check that empname and salary are given
            IF sitra.SITRA_PATRIMOINE.nom_structure_en IS NULL THEN
                sitra.SITRA_PATRIMOINE.nom_structure_en = sitra.SITRA_PATRIMOINE.nom_structure_fr;
            END IF;
        END;
    $maj_nom_structure_en_vide$ LANGUAGE plpgsql;
    Voilà, voilà.........



    Pour être franc je ne suis pas très sûr (pas du tout même) de la procédure. Et aussi, qu'est-ce que je fais d'elle. Je la copie dans un fichier texte que j'enregistre qq part ? Si oui où et comment je l'appelle ?

    Autre question, pourquoi n'est-ce pas possible, ou alors je n'ai pas tout compris d'utiliser tout simplement la fonction sql plutôt que la procédure qui se trouve (encore) dans un autre langage et dans un fichier ?
    arnaud Colé

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il y a deux problèmes classiques dans ce trigger:

    1. on accède à la ligne en cours d'insertion ou d'update avec NEW.
    quand tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sitra.SITRA_PATRIMOINE.nom_structure_en
    ça ne correspond à rien pour le trigger, il faut mettre pour se référer à la future valeur de la colonne nom_structure_en.

    2. il faut que le trigger renvoie quelque chose, généralement RETURN NEW fait l'affaire.

    Lire la doc PostgreSQL pour plus de détails.

    Pour le mode opératoire il faut exécuter le CREATE FUNCTION comme n'importe quel autre ordre SQL.
    Il peut être stocké dans un fichier pour conservation mais ça n'intéresse pas le serveur, lui ne fait qu'exécuter les requêtes qu'on lui envoie et stockera le code de la fonction dans son propre espace (le "catalogue").

Discussions similaires

  1. besoin d'aide pour la création d'une requête
    Par fabien59420 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/06/2008, 15h29
  2. besoin d'aide pour la création d'un requête
    Par fabien59420 dans le forum Requêtes et SQL.
    Réponses: 19
    Dernier message: 21/05/2008, 11h41
  3. besoin d'aide pour la création d'un logiciel
    Par lemoinedu49 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/12/2007, 06h21
  4. Réponses: 3
    Dernier message: 26/06/2007, 14h53
  5. Réponses: 2
    Dernier message: 10/03/2006, 13h55

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