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

SQL Oracle Discussion :

Export oracle vers csv


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Export oracle vers csv
    Bonjour,

    Je souhaite exporter le contenu d'une table oracle vers un fichier csv pour l'utilser dans une application tiers.

    Pour être importé dans mon application tiers mon csv doit être structuré comme suit:
    --------------------------------------
    ANNEE|GROUPEACT|IDENT|LIBELLE|SEMESTRE|NBAUTORISATION|NBINFOS|NBCHOIX|COMMENT|ACTIF|ATTESTATION
    2007|902|CRECHES|CRECHES|0|0|0|0|Réactualisation des tarifs pour les Crèches, la Crèche Familiale et les Mini-crèches. ATTENTION: une première inscription en crèche doit se faire IMPERATIVEMENT à la Direction de l'Enfance|O|O
    2007|907|CVAC|CENTRES DE VACANCES|0|0|2|0|<b>Les séjours proposés par les centres de vacances sont réservés aux enfants de moins de 18 ans. Ils s'affichent en fonction de leur âge.</B>|O|N
    -----------------------
    Mais lorsque je génère mon csv j'ai le résultat suivant:
    ---------------------------
    ANNEE|GROUPEACT|IDENT|LIBELLE|SEMESTRE|NBAUTORISATION|NBINFOS|NBCHOIX|COMMENT|AC
    TIF|ATTESTATION

    2008|33|SPORTS|SPORTS|0|1|2|2||N|N
    2008|34|ESCALE|ESCALE|0|0|1|3||O|N
    2008|900|RESTAUSCOL|RESTAURATION SCOLAIRE|0|0|2|0||O|O
    2008|901|LOISIRS|CENTRES DE LOISIRS-CLUBS PRE-ADOS ET ADOS|0|0|2|0|Les enfants d
    es maternelles participant au goûter doivent, pour des raisons d'assurances, êtr
    e également inscrits au Centre de Loisirs maternelle et régler le montant du fo
    rfait annuel.|O|O

    2008|902|CRECHES|CRECHES|0|0|0|0|Réactualisation des tarifs pour les Crèches, la
    Crèche Familiale et les Mini-crèches. ATTENTION: une première inscription en cr
    èche doit se faire IMPERATIVEMENT à la Direction de l'Enfance|O|O
    ----------------------------------
    Il ya des lignes entre les enregistrements mais je ne sais pas pourquoi. Certainement un pb de fin d'enregistrement mais je ne sais pas comment le générer dans mon code.

    Voici la requête utilisée:
    spool P:\ALVEOLE\PI_en_Ligne\Script\ScriptPI\Export\GROUPEACTS.csv
    SET ECHO OFF
    SET FEED OFF
    SET TERMOUT OFF
    -- SET LINESIZE 123 (j'ai essayé plusieurs linesize avant sans résultat)
    SET PAGESIZE 0
    SET HEADING OFF
    SELECT 'ANNEE|GROUPEACT|IDENT|LIBELLE|SEMESTRE|NBAUTORISATION|NBINFOS|NBCHOIX|COMMENT|ACTIF|ATTESTATION'
    from dual
    union
    SELECT "LEV_PI_GROUPEACTS"."ANNEE"||'|'||
    "LEV_PI_GROUPEACTS"."GROUPEACT"||'|'||
    "LEV_PI_GROUPEACTS"."IDENT"||'|'||
    "LEV_PI_GROUPEACTS"."LIBELLE"||'|'||
    "LEV_PI_GROUPEACTS"."SEMESTRE"||'|'||
    "LEV_PI_GROUPEACTS"."NBAUTORISATION"||'|'||
    "LEV_PI_GROUPEACTS"."NBINFOS"||'|'||
    "LEV_PI_GROUPEACTS"."NBCHOIX"||'|'||
    "LEV_PI_GROUPEACTS"."COMMENTAIRE"||'|'||
    "LEV_PI_GROUPEACTS"."ACTIF"||'|'||
    "LEV_PI_GROUPEACTS"."ATTESTATION"
    FROM "LEV_PI_GROUPEACTS"
    ORDER BY 1;
    SPOOL OFF
    SET ECHO ON
    SET FEED ON
    SET PAGESIZE 100
    SET HEADING ON
    SET LINES 80
    SET TERMOUT ON
    EXIT;

    Quelqu'un peut il m'aider ?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    met en forme ton texte avec la balise code - bouton #
    Là, c'est illisible

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Je n'ai pas compris

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Afin de faciliter la lecture du code, il est préférable d' utiliser la balise [code] en sélectionnant le texte concerné et en cliquant sur le bouton "#"

    par exemple :
    SELECT table_name FROM all_tables WHERE tablespace_name LIKE 'USERS';

    sera plus lisible si tu utilises la balise code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT table_name
    FROM all_tables 
    WHERE tablespace_name LIKE 'USERS';
    Juste au cas ou, ne postes pas un nouveau message, mais réédites ton précédent message en faisant la manip

    ++

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Essaye :

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 220
    Points
    220
    Par défaut
    Voici une procédure très pratique et générique pour exporter le résultat d'une requête en csv (adaptée de la solution proposée par Laurent Schneider ) :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    CREATE OR REPLACE TYPE VARCHAR2_TABLE AS TABLE OF VARCHAR2(4000);
    /
     
    CREATE OR REPLACE FUNCTION Exporter(
        strRequete IN VARCHAR2,
        strSeparateur IN VARCHAR2 DEFAULT ';') RETURN VARCHAR2_TABLE PIPELINED IS
     
    ctx DBMS_XMLGEN.CTXHANDLE;
    rcResultat NUMBER;
    iRetour NUMBER;
    iNbColonnes INTEGER;
    recTable DBMS_SQL.DESC_TAB;
    strColonnes VARCHAR2(4000);
     
    BEGIN
     
        rcResultat := DBMS_SQL.OPEN_CURSOR();
        DBMS_SQL.PARSE(rcResultat, strRequete, DBMS_SQL.NATIVE);
        iRetour := DBMS_SQL.EXECUTE(rcResultat);
        DBMS_SQL.DESCRIBE_COLUMNS(rcResultat, iNbColonnes, recTable);
     
        FOR j IN 1..iNbColonnes LOOP
     
          strColonnes := strColonnes||recTable(j).col_name;
     
          IF (j < iNbColonnes) THEN
              strColonnes := strColonnes||strSeparateur;
          END IF;
     
        END LOOP;
     
        DBMS_SQL.CLOSE_CURSOR(rcResultat);
        PIPE ROW(strColonnes);
     
        ctx := DBMS_XMLGEN.NEWCONTEXT(strRequete);
        DBMS_XMLGEN.SETNULLHANDLING(ctx, DBMS_XMLGEN.EMPTY_TAG);
        FOR Colonnes IN (
            SELECT 
                CAST(
                    XMLTRANSFORM(
                        COLUMN_VALUE,
                        XMLTYPE('<xsl:stylesheet version="1.0" xmlns:xsl'||
                        '="http://www.w3.org/1999/XSL/Transform">'||
                        '<xsl:output method="text"/><xsl:variable name'||
                        '="new_line" select="''&#xA;''" /><xsl:template'||
                        ' match="ROWSET"><xsl:apply-templates select="'||
                        'ROW"/></xsl:template><xsl:template match="ROW"'||
                        '><xsl:for-each select="*"><xsl:value-of select'||
                        '="."/><xsl:if test="position() != last()"><xsl'||
                        ':value-of select="'''||strSeparateur||'''"/></xsl:if></xsl:for-'||
                        'each><xsl:value-of select="$new_line" /></xsl:'||
                        'template></xsl:stylesheet>'
                    )
                ) AS VARCHAR2(4000)) ValeurColonne
             FROM TABLE(XMLSEQUENCE(DBMS_XMLGEN.GETXMLTYPE(ctx).EXTRACT('ROWSET/ROW'))))
     
        LOOP
            PIPE ROW(Colonnes.ValeurColonne);
        END LOOP;
     
    END Exporter;
    /
     
    /* 
        Exemple
    */
    SELECT *
    FROM TABLE(Exporter('SELECT * FROM USER_PROCEDURES', '|'));
    rbaraer

Discussions similaires

  1. Exporter ListView vers CSV
    Par Zhamy dans le forum C#
    Réponses: 4
    Dernier message: 22/10/2011, 23h19
  2. Retour chariot=>Export Oracle vers Access[ODBC]
    Par Sabact dans le forum PL/SQL
    Réponses: 0
    Dernier message: 22/10/2008, 13h16
  3. Export Oracl vers MySQL
    Par NedaRyme dans le forum Administration
    Réponses: 2
    Dernier message: 18/06/2007, 11h44
  4. Export Oracle vers Access
    Par Rikou31 dans le forum Oracle
    Réponses: 5
    Dernier message: 20/02/2007, 14h53
  5. [SQL] exportation php vers csv
    Par yveslens dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/02/2007, 07h06

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