banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

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

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

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

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

icadedt a écrit:
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

Nicolas Ribot a écrit:
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

icadedt a écrit:
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 smile

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

icadedt a écrit:

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

 

Pied de page des forums

Powered by FluxBB