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

Requêtes PostgreSQL Discussion :

Trigger pour mettre à jour un champ dont le nom est dynamique


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Trigger pour mettre à jour un champ dont le nom est dynamique
    bonjour à tous

    dans chacune de mes tables j'ai un champ nommé <table_name>_uuid et à l'insertion d'une ligne j'aimerais renseigner une valeur pour ce champ

    comme DEFAULT ne fonctionne pas avec des fonctions j'essaie de coder un trigger dont voici le code :

    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 uuid_generator()
    RETURNS TRIGGER
    LANGUAGE plpgsql
    AS $$
    DECLARE
      uuidField VARCHAR;
    BEGIN
      uuidField := TG_TABLE_NAME || '_uuid';
     
      EXECUTE '($1).' || QUOTE_IDENT(uuidField) || ' := uuid_generate_v4()' USING NEW;
     
      RETURN NEW;
    END;
    $$;
    uuidField contient bien le nom du champ dans lequel je veux stocker la valeur mais ma commande EXECUTE ne fonctionne pas, visiblement à cause d'un problème de syntaxe

    pourriez-vous m'indiquer comment corriger le problème ?

    merci

  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
    comme DEFAULT ne fonctionne pas avec des fonctions j'essaie de coder un trigger dont voici le code :
    Non, DEFAULT accepte bien des fonctions.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test=# create table test_uuid(i int, u uuid default uuid_generate_v4());
    CREATE TABLE
    => Aucune erreur

    A l'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    test=# insert into test_uuid (i) values(1);
    INSERT 0 1
    test=# select * from test_uuid;
     i |                  u                   
    ---+--------------------------------------
     1 | 6936a0bc-1aaa-4e13-918e-8cd88205a877
    (1 row)
    => Pas de problème.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    pourtant j'étais persuadé que ce n'était pas le cas :\

    entre temps j'ai trouvé une solution à base de perl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE OR REPLACE FUNCTION uuid_generator_pl()
    RETURNS TRIGGER
    LANGUAGE plperl
    AS $$
    my $uuidField = $_TD->{table_name}.'_uuid';
     
    $_TD->{new}{$uuidField} = 'uuid_test';
     
    return "MODIFY";
    $$;
    mais je vais passer par le DEFAULT...

    merci

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

Discussions similaires

  1. [10g] Syntaxe d'un trigger pour mettre à jour un champ calculé
    Par ceuce dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/04/2015, 14h53
  2. [AC-2010] fonction pour mettre à jour un champ en majuscule
    Par bremmo76 dans le forum Access
    Réponses: 6
    Dernier message: 23/09/2010, 22h53
  3. Réponses: 7
    Dernier message: 16/09/2008, 19h08
  4. utilise le composant updatesql pour mettre à jour un champ
    Par andyafrique dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/10/2006, 12h48
  5. Réponses: 2
    Dernier message: 21/09/2005, 13h35

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