Pages: 1
- Sujet précédent - valeur par defaut d'un champ issu du calcul avec un autre champ - Sujet suivant
#1 Mon 13 February 2012 12:15
- icadedt
- Participant assidu
- Lieu: ici et là
- Date d'inscription: 21 Jul 2006
- Messages: 478
valeur par defaut d'un champ issu du calcul avec un autre champ
Bonjour,
est il possible de déterminer la valeur par défaut d'un champ avec la valeur d'un autre champ de la meme table?
Merci d'avance
Hors ligne
#2 Mon 13 February 2012 13:10
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: valeur par defaut d'un champ issu du calcul avec un autre champ
Bonjour,
est il possible de déterminer la valeur par défaut d'un champ avec la valeur d'un autre champ de la meme table?
Merci d'avance
Bonjour,
Oui, c'est possible. Un trigger permettrait de faire ca (BEFORE UPDATE OR INSERT)
Regardez aussi du coté de la définition de la table, avec un contrainte de type CHECK qui permet au moins de verifier qu'une valeur respecte des critères.
Nicolas
Hors ligne
#3 Mon 13 February 2012 13:34
- icadedt
- Participant assidu
- Lieu: ici et là
- Date d'inscription: 21 Jul 2006
- Messages: 478
Re: valeur par defaut d'un champ issu du calcul avec un autre champ
icadedt a écrit:Bonjour,
est il possible de déterminer la valeur par défaut d'un champ avec la valeur d'un autre champ de la meme table?
Merci d'avance
Bonjour,
Oui, c'est possible. Un trigger permettrait de faire ca (BEFORE UPDATE OR INSERT)
Regardez aussi du coté de la définition de la table, avec un contrainte de type CHECK qui permet au moins de verifier qu'une valeur respecte des critères.
Nicolas
Merci, auriez vous un exemple à me soumettre, je suis relativement debutant avec les triggers
Hors ligne
#4 Mon 13 February 2012 14:09
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: valeur par defaut d'un champ issu du calcul avec un autre champ
Nicolas Ribot a écrit:icadedt a écrit:Bonjour,
est il possible de déterminer la valeur par défaut d'un champ avec la valeur d'un autre champ de la meme table?
Merci d'avance
Bonjour,
Oui, c'est possible. Un trigger permettrait de faire ca (BEFORE UPDATE OR INSERT)
Regardez aussi du coté de la définition de la table, avec un contrainte de type CHECK qui permet au moins de verifier qu'une valeur respecte des critères.
Nicolas
Merci, auriez vous un exemple à me soumettre, je suis relativement debutant avec les triggers
Oui je peux, que cherchez-vous a faire exactement ?
Avez-vous un exemple de table et de valeurs par défaut a attribuer ?
Nicolas
Hors ligne
#5 Mon 13 February 2012 14:33
- icadedt
- Participant assidu
- Lieu: ici et là
- Date d'inscription: 21 Jul 2006
- Messages: 478
Re: valeur par defaut d'un champ issu du calcul avec un autre champ
icadedt a écrit:Nicolas Ribot a écrit:
Bonjour,
Oui, c'est possible. Un trigger permettrait de faire ca (BEFORE UPDATE OR INSERT)
Regardez aussi du coté de la définition de la table, avec un contrainte de type CHECK qui permet au moins de verifier qu'une valeur respecte des critères.
Nicolas
Merci, auriez vous un exemple à me soumettre, je suis relativement debutant avec les triggers
Oui je peux, que cherchez-vous a faire exactement ?
Avez-vous un exemple de table et de valeurs par défaut a attribuer ?
Nicolas
par exemple, dans ma table table1, j'ai ma colonne "X", une autre colonne "Y" et une autre "the_geom".
La colonne "the_geom" est de type geometry
A chaque modif d'un enregistrement de la table table1 je souhaite faire un update dans sa colonne the_geom d'après les coordonnées xy contenues dans "X" et "Y"
Hors ligne
#6 Mon 13 February 2012 15:03
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: valeur par defaut d'un champ issu du calcul avec un autre champ
Nicolas Ribot a écrit:icadedt a écrit:Merci, auriez vous un exemple à me soumettre, je suis relativement debutant avec les triggers
Oui je peux, que cherchez-vous a faire exactement ?
Avez-vous un exemple de table et de valeurs par défaut a attribuer ?
Nicolas
par exemple, dans ma table table1, j'ai ma colonne "X", une autre colonne "Y" et une autre "the_geom".
La colonne "the_geom" est de type geometry
A chaque modif d'un enregistrement de la table table1 je souhaite faire un update dans sa colonne the_geom d'après les coordonnées xy
contenues dans "X" et "Y"
Ah oui je vois. L'occasion d'un TP meme lors de formations
Le trigger est parfait pour ca:
La creation d'un trigger se fait en deux etapes:
1- creation de la fonction du trigger: le code exécuté par le trigger
2- creation du trigger sur la table en précisant quelle fonction utiliser
Code:
-------- La fonction du trigger create or replace function makeGeomFromGPS() returns trigger as $$ DECLARE BEGIN -- RAISE NOTICE 'Longi: %, lati: %', NEW.lon, NEW.lat; NEW.geom := st_setsrid(st_makepoint(NEW.lon, NEW.lat), 4326); RETURN NEW; END; $$ LANGUAGE PLPGSQL; --------- puis la creation du trigger drop trigger if exists traces_trigger on traces; create trigger traces_trigger BEFORE UPDATE OR INSERT ON traces FOR EACH ROW EXECUTE PROCEDURE makeGeomFromGPS();
Ce trigger agit sur une table "traces" ayant une colonne lon (longitude) et lat (latitude).
La colonne geometrique "geom" est mise a jour en fabriquant un point a partir des X-Y.
Nicolas
Dernière modification par Nicolas Ribot (Mon 13 February 2012 15:04)
Hors ligne
#7 Mon 13 February 2012 15:45
- icadedt
- Participant assidu
- Lieu: ici et là
- Date d'inscription: 21 Jul 2006
- Messages: 478
Re: valeur par defaut d'un champ issu du calcul avec un autre champ
D'accord, faut faire en 2 étapes, fonction à ecrire puis rattacher cette fonction au trigger à proprement parler.
Je vois un "foreach" , est ce que la fonction s'execute pour tous les enregistrements ou juste celui qui vient d'être modifié?
ou alors le foreach dit juste à chaque enregistrment d'être attentif à la fonction
Dernière modification par icadedt (Mon 13 February 2012 15:46)
Hors ligne
#8 Mon 13 February 2012 17:07
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: valeur par defaut d'un champ issu du calcul avec un autre champ
D'accord, faut faire en 2 étapes, fonction à ecrire puis rattacher cette fonction au trigger à proprement parler.
Je vois un "foreach" , est ce que la fonction s'execute pour tous les enregistrements ou juste celui qui vient d'être modifié?
ou alors le foreach dit juste à chaque enregistrment d'être attentif à la fonction
Oui, il dit exactement cela. Tous les records soumis a un insert ou update declencheront le trigger.
Sur postgresql 9.0+, vous pouvez meme déclarer le trigger avec une condition "CHECK" pour ne se declencher que dans certains cas.
Dans votre cas par exemple, si vous ne voulez rien faire si une coordonnée X ou Y est nulle, une condition check dans la def. du trigger permettrait d'eviter son declenchement.
Nicolas
Dernière modification par Nicolas Ribot (Mon 13 February 2012 17:09)
Hors ligne
Pages: 1
- Sujet précédent - valeur par defaut d'un champ issu du calcul avec un autre champ - Sujet suivant