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 : comment intégrer l'année courante et une concaténation de champs


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre du Club
    Homme Profil pro
    chargé d'études
    Inscrit en
    Janvier 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chargé d'études

    Informations forums :
    Inscription : Janvier 2015
    Messages : 93
    Points : 57
    Points
    57
    Par défaut Trigger : comment intégrer l'année courante et une concaténation de champs
    bonjour,
    j'essaie de faire un trigger ayant pour objetif de remplir une couche (A) à partir d'une autre couche (U).
    je bute sur 2 points.

    je voudrai ajouter deux champs:
    1) l'année courante (j'ai trouvé la fonction de la date courante mais pas de l'année courante).
    2) un champ concaténant "l'annee courante", la variable "new.code_insee" et un champ "numero" noté à la main dans ma table A.

    pourriez vous svp me mettre sur la piste ??

    ci-dessous mon code actuel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE FUNCTION a.maj()
    RETURNS trigger AS
    $BODY$
    BEGIN
    SELECT code_insee FROM u.com WHERE st_intersects((NEW.geom), geom) INTO NEW.code_insee;
    NEW.date_saisie:= current_date;
    SELECT nom FROM u.com WHERE st_intersects((NEW.geom), geom) INTO NEW.lib;
    NEW.lib = UPPER(NEW.lib)
    RETURN NEW;
    END;
    $BODY$
    LANGUAGE plpgsql;

  2. #2
    Membre du Club
    Homme Profil pro
    chargé d'études
    Inscrit en
    Janvier 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chargé d'études

    Informations forums :
    Inscription : Janvier 2015
    Messages : 93
    Points : 57
    Points
    57
    Par défaut
    bonjour,
    pour récupérer la date courante dans le trigger je n'y suis pas arrivé (j'ai contourné le pb en paramétrant la variable date dans pgadmin);
    pour concaténer : je suis passé par une fonction récupérée sur google.

    je constate deux phénomènes que je ne comprends pas:
    1) lors de la création du 1er point dans Qgis, la feuille de données Qgis n'affiche pas les deux champs concaténés , ni la date courante.
    2) en rendant modifiable la feuille, et en cliquant sur la cellule date courante, celle-ci apparait !!.
    Les champs concaténés n'apparaissent pas.


    Si quelqu'un peut m'expliquer la raison...

    ci-dessous mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    CREATE TABLE public.a  
    (gid SERIAL NOT NULL PRIMARY KEY, 
    num integer not null, 
    code_insee VARCHAR(5),
    nom varchar(150),
    date_saisie date, 
    annee_saisie integer,
    full_name VARCHAR(60),
    indexation_1 VARCHAR(150),
    indexation_2 VARCHAR(150),
    geom geometry(point,2154))
     
     
    CREATE OR REPLACE FUNCTION "public"."concat_2var" (s1 varchar, s2 varchar, s3 varchar) RETURNS varchar AS
    $body$
    BEGIN
    RETURN s1||s2||s3;
    END;
    $body$
    LANGUAGE 'plpgsql'
    VOLATILE
    CALLED ON NULL INPUT
    SECURITY INVOKER
    COST 100;
     
     
    CREATE OR REPLACE FUNCTION public.maj_a()
    RETURNS trigger AS
    $BODY$
    BEGIN
    SELECT code_insee FROM public.com WHERE st_intersects((NEW.geom), geom) INTO NEW.code_insee;
    SELECT nom FROM public.com WHERE st_intersects((NEW.geom), geom) INTO NEW.nom;
    NEW.nom = UPPER(NEW.nom);
    NEW.annee_saisie:= EXTRACT(YEAR FROM CURRENT_DATE); 
    SELECT DISTINCT public.concat_2var(NEW.code_insee::varchar,'-',NEW.num::varchar) from public.a INTO NEW.indexation_1;
    SELECT DISTINCT public.concat_2var(NEW.annee_saisie::varchar,'-',NEW.indexation_1::varchar) from public.a INTO NEW.indexation_2;
    RETURN NEW;
    END;
    $BODY$
    LANGUAGE plpgsql;
     
     
    CREATE TRIGGER maj_a
    BEFORE INSERT
    ON public.a
    FOR EACH ROW
    EXECUTE PROCEDURE maj_a();

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/11/2012, 16h45
  2. Comment intégrer un lecteur VLC dans une page web ?
    Par ghilo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 05/10/2012, 13h54
  3. Comment intégrer un fichier wave dans une Jar exécutable?
    Par HNoury dans le forum Général Java
    Réponses: 7
    Dernier message: 22/08/2008, 22h52
  4. Réponses: 1
    Dernier message: 12/05/2008, 17h55
  5. Réponses: 2
    Dernier message: 19/10/2005, 22h29

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