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 :

Récupération d'une variable dans un update


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Points : 13
    Points
    13
    Par défaut Récupération d'une variable dans un update
    Bonjour,

    je voudrais créer un fichier texte pour chacune de mes dates pour cela j'ai le trigger suivant :

    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
    -- Create function
     
    CREATE OR REPLACE FUNCTION export_text () RETURNS TRIGGER AS
    --Declaration d'une variable locale
    $BODY$
      DECLARE
        str_date varchar(20);
      BEGIN 
    -- on met dans la variable locale le max de la colonne   
        str_date:=TG_ARGV[1];
        copy (select * from fr_30y where tmp = to_char(str_date) ) to 'C:/o/d_''str_date''.txt';
        NEW.valid:=1;
        RETURN NEW;
      END; 
    $BODY$
    LANGUAGE 'plpgsql'; 
     
    --Creation du trigger
    DROP TRIGGER trig_txt_date ON all_date;
    CREATE TRIGGER trig_txt_date AFTER INSERT ON all_date
    FOR EACH ROW 
    EXECUTE PROCEDURE export_text();
    --*/
     
    insert into all_date(string_date,date_)
    	values('20120927', to_date('20120927','YYYYMMDD'));
    Cependant je n'arrive pas à récupérer la valeur de ma variable str_date, je voudrais la mettre dans ma clause where ainsi que dans le nom du fichier.txt

    Je n'arrive évidement pas à récupérer cette valeur...

    Si quelqu'un a une idée je suis preneur !

    merci d'avance!

  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
    TG_ARGV fait référence à des arguments d'une commande CREATE TRIGGER qui n'est pas montrée dans le message, donc impossible de voir une éventuelle erreur.

    Mais ce qui parait étonnant ici c'est d'utiliser un trigger au lieu d'une fonction normale qui prendrait des paramètres normalement.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Effectivement, il aurait peut-être fallu utiliser une procédure normale je ne l'ai pas vu car je débute avec Postgres.

    L'intérêt que j'ai trouvé au trigger était le "FOR EACH ROW" mais peut-être est-il accessible d'une autre manière que via un trigger.

    Finalement j'ai réussi à faire ce que je désirais avec le code suivant :

    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
    -- Create function
    CREATE OR REPLACE FUNCTION export_text () RETURNS TRIGGER AS
    $BODY$
      DECLARE
        str_date varchar(20);
        path varchar(200);
        command varchar(1000);
      BEGIN  
        str_date:=NEW.string_date;
        path:='''C:/o/d_'||NEW.string_date||'.txt''';
        command:= 'copy (select station,
    			x_long, 
    			y_lat, 
    			...
    			id_thunder, 
    			id_tornado from fr_30y where tmp = '''||str_date||''' ) to '||path||';';
        execute command;
        RETURN NEW;
      END; 
    $BODY$
    LANGUAGE 'plpgsql'; 
     
    --Creation du trigger
    DROP TRIGGER trig_txt_date ON all_date;
    CREATE TRIGGER trig_txt_date AFTER INSERT ON all_date
    FOR EACH ROW 
    EXECUTE PROCEDURE export_text();
    --*/
     
    --delete from all_date;
    --Insert into all_date (string_date,date_)
    --	values('19790104',to_date('19790104','YYYYMMDD')),
    --	('19790110',to_date('19790110','YYYYMMDD'));
    --	select distinct(tmp),date_ from fr_30y;
     
    Insert into all_date (string_date)
    	values('20031225'),
    ('19881008'),
    ('20070819'),
    ...
    ...
    ('20100215');
    Si quelqu'un a une idée d'amélioration, ça m'intéresse également!

    Et une dernière chose : que je ne comprends pas pourquoi mon champ "valid" n'est pas mis à jour avec

  4. #4
    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
    Pour modifier une valeur de la ligne, logiquement il faudrait un trigger BEFORE INSERT au lieu de AFTER INSERT.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Effectivement ça m'a l'air plutôt logique ... Je vais essayer ça!

Discussions similaires

  1. [Batch] Récupération d'une variable dans un fichier txt
    Par killgones dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 09/07/2014, 09h17
  2. [MySQL] Problème avec la récupération d'une variable dans un lien pour un panier
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/06/2011, 13h58
  3. Récupération d'une variable dans un lien
    Par Meloooo dans le forum Langage
    Réponses: 6
    Dernier message: 19/05/2009, 23h49
  4. [Dates] Récupération d'une variable dans whois ndd
    Par Arawn94 dans le forum Langage
    Réponses: 12
    Dernier message: 07/06/2007, 14h54
  5. Réponses: 3
    Dernier message: 29/05/2006, 23h46

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