Vous n'êtes pas identifié(e).

#1 Re : PL/pgSQL » requête avec apostrophe dans variable » 23/10/2012 08:45:14

Bonjour,

Merci pour votre réponse. Désolée de ne pas avoir précisé le langage, en fait comme j'ai posté ce message dans la section PL/pgSQL je pensais que ça suffisait. J'ai essayé d'utiliser le using mais j'obtiens une erreur de syntaxe. Par contre en utilisant le quote_literal, cela fonctionne parfaitement! (Pour info, je suis en version 8.4 de postgreSQL)

Un grand merci pour votre aide!

#2 PL/pgSQL » requête avec apostrophe dans variable » 22/10/2012 11:57:53

laura
Réponses : 2

Bonjour,

J'ai créé une fonction qui automatise l'export au format csv du résultat d'une requête dont un champ est une variable (le nom d'une commune).
Le problème est que pour certaines communes j'ai une apostrophe dans le nom et de ce fait ma requête select ne fonctionne pas dans tous les cas.
Que dois je faire pour résoudre ce problème?

voici la structure de ma requête select :
select * from matable where commune = ''' || varcommune|| '''

où varcommune est la variable contenant le nom de la commune

Merci beaucoup pour votre aide.

#3 Re : PL/pgSQL » Problème d'encodage avec commande COPY » 19/10/2012 08:33:49

Du coup je regarde plutôt du côté d'Excel avec l'import de données externe ça fonctionne, il ne me reste plus qu'à rédiger la bonne macro pour automatiser tout ça (j'ai beaucoup de fichiers)
Merci encore pour votre aide

#4 Re : PL/pgSQL » Problème d'encodage avec commande COPY » 18/10/2012 13:46:27

Lorsque j'exécute uniquement ma requête select et que je fais fichier/exporter, je peux choisir un type de codage et lorsque je sélectionne 'Jeu de caractère local', le résultat conserve bien mes caractères spéciaux (ce qui n'est pas le cas lorsque je sélectionne Unicode UTF-8).
Pour lire les fichiers csv créés, j'utilise Excel 2003.
Il n'y a aucun moyen de changer l'encodage?

Merci

#5 Re : PL/pgSQL » Problème d'encodage avec commande COPY » 18/10/2012 12:20:16

Ma base de données est en UTF8 et j'utilise la version 8.4 de PostgreSQL

Je pense que j'ai aussi un problème de cote, je ne doit pas les placer au bon endroit...

Voici la function que je souhaite mettre en place. Elle fonctionne correctement sans le encoding :

create or replace function export_hydrant () returns void as
$body$
declare
    id_carto text;
    commune text;
    ciecommune text;

begin
    for id_carto in execute 'select distinct id_carto from sig_commune  ' --récupère l'id_carto de toutes les communes de la table sig_commune
    loop
        for commune in execute 'select distinct commune_simple from sig_commune where id_carto = ' || id_carto --récupère le nom de la commune pour l'id_carto trouvé
        loop
            for ciecommune in execute 'select distinct compagnie||commune_simple from sig_commune where id_carto = ' || id_carto -- récupère, pour cet id_carto, la concaténation du champ compagnie avec le champ commune simple, cela permettra de donné un nom au fichier csv)
            loop
                raise log  '%', id_carto;
                execute 'copy (select id_carto,sous_type,annee_dernier_controle,observation,debit_max_en_m3h,commune,complement_adresse,num_hydrant,pression_statique,num_voie,type_voie,excipient_voie,libelle_voie,num_tournee,debit_1bar,pression_dynamique_60m3h,num_ordre_tournee,domaine,num_folio,NULL as capacite_txt from sig_hydrant_pression where commune = ''' || commune || '''
                union all
                select id_carto,sous_type,annee_dernier_controle,observation, NULL as debit_max_en_m3h,commune,complement_adresse,num_hydrant,NULL as pression_statique,num_voie,type_voie,excipient_voie,libelle_voie,num_tournee,NULL as debit_1bar,NULL as pression_dynamique_60m3h,num_ordre_tournee,domaine,num_folio,capacite_txt from sig_hydrant_aspiration where commune = ''' || commune || ''')' -- requête qui permet de récupérer tous les hydrants d'une commune
                || ' to ''/ExportPostgre/' || ciecommune ||'.csv'' ' -- crée un fichier csv pour chaque commune
                || 'with csv header DELIMITER ''    '' '; -- le séparateur entre les colonne est une tabulation
            end loop;
        end loop;
    end loop;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE;

Merci encore

#6 PL/pgSQL » Problème d'encodage avec commande COPY » 18/10/2012 10:53:29

laura
Réponses : 5

Bonjour,

Je débute avec PostgreSQL...
Je souhaite réaliser un export en csv de deux tables. J'utilise pour cela la commande COPY. Jusque la tout va bien.
Le problème est que lorsque j'ouvre le csv créé j'ai un problème d'accent et de caractères spéciaux... Je ne sais pas comment faire pour modifier l'encodage (je pense que cela vient de la).
J'ai cru comprendre qu'il fallait ajouter l'option encoding dans la commande copy (with csv header encoding ''LATIN2'') mais j'obtiens systématiquement une erreur de syntaxe . De plus je ne sais pas quel encodage choisir pour que cela fonctionne...

Je vous remercie par avance pour votre aide

Pied de page des forums

Propulsé par FluxBB