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

Oracle Discussion :

Export de données triées vers CSV


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 102
    Points : 47
    Points
    47
    Par défaut Export de données triées vers CSV
    Bonjour,

    J'utilise cette procédure pour exporter mes tables dans des fichier CSV.
    En effet, je fais un export CSV et ensuite on modifie les structures de certaines tables et je refais un deuxième export pour le comparer avec le premier.
    Pour que la comparaison soit fiable, chaque requête est complété par un "order by" avec comme paramètre le nombre de colonne de la table

    exemple : pour la table T(a,b,c,d)
    ma requête est : 'select * from ' || T order by 1,2,3,4;

    Avant, le dump concernait un nombre limité des tables et par conséquent l'ajout de l "ordre by" manuellement n'était pas très couteux.
    Maintenant j'aimerais faire le dump en CSV pour toute la base et généré automatiquement le "order by" suivant le nombre de colonne de la table.

    Quelqu'un a une idée sur comment je peux faire ?
    Merci d'avance.

  2. #2
    Membre habitué Avatar de meufeu
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 355
    Points : 166
    Points
    166
    Par défaut
    Est-ce que cette requête serait suffisante pour générer un résultat sous forme de lignes séparées par un ; ?

    Il suffirait ensuite de spooler le résultat dans un fichier txt ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select 1 || ';' || 2 || ';' || 3 || ';' || 4 || ';' from T order by 1,2,3,4;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 102
    Points : 47
    Points
    47
    Par défaut
    Bonjour,
    Désolé pour le retard car j'avais pris quelques jours de congé.

    L'objectif pour moi est :
    1 - récupérer le nombre de colonne d'une table de façon automatique. Je ne connais pas à l'avance combien de colonnes se trouvent dans la table
    2 - générer un fichier CSV portant le même nom que ma table.
    J'ai commencé à faire qqch de ce style mais je n'arrive pas à le faire marcher avec la procédure précédente
    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
    DECLARE
    nom USER_TABLES.TABLE_NAME%TYPE;
    nb  NUMBER(12);
    CURSOR C1 IS SELECT US.TABLE_NAME, count(*)  FROM USER_TABLES US, USER_TAB_COLUMNS UC where US.TABLE_NAME = UC.TABLE_NAME group by US.TABLE_NAME;
    BEGIN
    OPEN C1;
    LOOP
    FETCH C1 INTO nom, nb;
    EXIT WHEN C1%NOTFOUND;
    --SELECT count(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'nom';
    DBMS_OUTPUT.PUT_LINE ( nom || ' nb colonne '||nb);
    END LOOP;
    CLOSE C1;
    END;
    /
    Je pense qu'il faut utiliser SQL dynamique mais je ne sais pas encore comment le faire

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Selon moi, tu dois:
    1. générer ta requête dynamiquement en te basant sur les vues user_tables et user_tab_columns
    2. appeler ta procédure CSV

    Cela donnerait quelque chose comme cela :
    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
    declare
       v_cols varchar2(4000);
    begin
       for v_table in (select table_name from user_tables) loop
          v_cols := '';
          for v_col in (select column_name from user_tab_columns where table_name = v_table.table_name) loop
             if v_cols is not null then
                v_cols := v_cols || ',';
             end if;
             v_cols := v_cols || v_col.column_name;
          end loop;
          csv('select ' || v_cols || ' from ' || v_table.table_name || ' order by ' || v_cols);
       end loop;
    end;
    /

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 102
    Points : 47
    Points
    47
    Par défaut
    JE vous remercie.
    Je suis en train de tester la solution.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 102
    Points : 47
    Points
    47
    Par défaut
    J'ai testé la solution mais ça me génère un fichier vide.
    Je ne comprends pas pourquoi car la log ne contient rien. la voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL*Plus: Release 10.2.0.1.0 - Production on Ven. Août 6 17:23:44 2010
     
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
     
    Connecté à :
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut set serveroutput on
    Salut,

    La procédure csv affiche les ordres avec dbms_output.
    Ce package a besoin d'un paramètre sur la session sqlplus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    set serveroutput on
    declare
      dbms_output.put_line(...
    End;
    /

    Sinon ça n'affiche rien.

    Vous pouvez également utiliser le package utl_file pour placer les ordres dans un fichier au lieu de les afficher.

    Pozzo


    Pozzo

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 102
    Points : 47
    Points
    47
    Par défaut
    Je te remercie et désolé pour le retard car je me suis absenté du bureau.

    en fait, j'avais positionné cette variable mais ça n'a pas marché.

    J'ai fait une autre solution et quand je l'aurais fini, je la mettrai sur le forum.

    Merci à vous tous

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

Discussions similaires

  1. [XL-2003] Export données XLS vers CSV
    Par Monfy29 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2011, 14h19
  2. [ODBC] Experts: Export de données Access vers PHP: probleme d'attributs
    Par kenny49 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/06/2006, 14h42
  3. exporter des données access vers excel
    Par Sebastien_INR59 dans le forum Access
    Réponses: 8
    Dernier message: 20/06/2006, 23h29
  4. Export de données Oracle vers Excel via PHP
    Par Yanos dans le forum Oracle
    Réponses: 1
    Dernier message: 11/01/2006, 18h11
  5. [Excel] Exportation de donnée excel vers MySQL
    Par yoda7666 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/11/2005, 16h18

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