Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 09h40   #1
Invité de passage
 
Inscription : février 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 25
Points : 4
Points : 4
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 :
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
sarsipius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 14h52   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Citation:
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 :
1
2
test=# create table test_uuid(i int, u uuid default uuid_generate_v4());
CREATE TABLE
=> Aucune erreur

A l'utilisation
Code :
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.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h47   #3
Invité de passage
 
Inscription : février 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 25
Points : 4
Points : 4
pourtant j'étais persuadé que ce n'était pas le cas :\

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

Code :
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
sarsipius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h50.


 
 
 
 
Partenaires

Hébergement Web