2
votes

comment exporter des données d'environ 300 tables dans ORACLE DB vers des fichiers csv ou txt

Existe-t-il une possibilité d'exporter des données d'environ 300 tables dans un même schéma avec des millions d'enregistrements au format CSV ou TXT en utilisant n'importe quelle procédure PL / SQL?

Que proposez-vous, quel est le moyen le plus rapide de le faire? Pour le moment je n'ai pas besoin d'importer ces fichiers exportés vers un autre schéma ...

J'ai essayé avec Toad d'exporter manuellement table par table ...


3 commentaires

Je vous suggère de jeter un œil à l’article Oracle-Base de Tim Hall sur ce sujet . Son script csv.sql ressemble au genre de chose que vous pourrait utiliser pour conduire une solution automatisée.


Avez-vous essayé d'exporter toutes les tables à la fois avec toad? (car toad prend en charge plusieurs exportations de table)


@Plirkee .. J'ai peur d'utiliser toad car il peut planter à tout moment car il y a beaucoup de données dans ces tableaux.


4 Réponses :


0
votes

vous pouvez essayer les étapes suivantes.

  1. écrire une boucle pour obtenir les noms de table
  2. utiliser des curseurs pour récupérer les données de chaque table
    1. utilisez les utilitaires SYS.UTL_FILE pour écrire les données dans des fichiers dans n'importe quel format requis.

C'est une solution de très haut niveau. Mais je suis sûr que cela fonctionnera.


0 commentaires

0
votes

J'ai créé un utilitaire par lequel vous pouvez générer des procédures PL / SQL pour exporter des données à partir d'une table. Il prendra les paramètres suivants, le nom de la table, les noms des colonnes, le nom du répertoire et le délimiteur. Vous pouvez générer 50 procédures pour 50 tables en un rien de temps pour exporter des données d'Oracle. Vérifiez ce lien Générer une procédure PL / SQL pour exporter des données au format CSV


4 commentaires

Saisir tous ces détails dans votre site Web pour 50 - et encore moins 300 - tables ne sera pas plus rapide que d'utiliser l'utilitaire d'exportation de Toad.


Sa question était de faire cette tâche en utilisant la procédure PL / SQL, c'est pourquoi j'ai suggéré. Il peut également utiliser ces procédures stockées à l'avenir.


@AfrimRexhepi Pouvez-vous obtenir le fichier CSV à l'emplacement du répertoire? N'oubliez pas que le nom du répertoire doit être en majuscules dans la procédure ...


@VinishKapoor ouais je le comprends maintenant .. j'ai des fichiers et tout va bien. Mais créer une procédure pour chaque fichier est vraiment trop .. de toute façon merci pour le code! Je peux l'utiliser à d'autres fins.



0
votes

J'ai réussi à parcourir dynamiquement toutes les tables et à obtenir les noms de colonnes et à écrire dans un fichier. Je lutte en partie pour savoir comment récupérer des lignes de données à partir de tables de manière dynamique lors de l'exécution d'une requête immédiate? comment dois-je enregistrer des lignes de données et les récupérer et écrire dans des fichiers? Voici le code:

DECLARE p_table        VARCHAR2 (100);
l_file UTL_FILE.FILE_TYPE;
l_string       VARCHAR2 (10000);
query_string   VARCHAR2 (4000);
BEGIN
FOR tab IN (SELECT *
             FROM dba_tables
            WHERE owner = 'XYZ' AND table_name LIKE 'XYZ%')
LOOP
  p_table := tab.table_name;

  l_file :=
     UTL_FILE.FOPEN ('my_path',
                     tab.table_name || '.txt',
                     'w',
                     10000);
  l_string := NULL;


  FOR col_he IN (SELECT *
                   FROM dba_tab_columns
                  WHERE owner = 'DWHCO' AND table_name = p_table)
  LOOP
     CASE
        WHEN l_string IS NULL
        THEN
           l_string := col_he.column_name;
        ELSE
           l_string := l_string || ',' || col_he.column_name;
     END CASE;
  END LOOP;

  UTL_FILE.PUT_LINE (l_file, l_string);            --Printng table columns

  query_string := 'select ' || l_string || ' from DWHCO.' || p_table      
  --Execute immediate query_string into ??????????;
        --??????
  UTL_FILE.FCLOSE (l_file);  END LOOP;END;


0 commentaires

0
votes

La procédure de Data Dump est utile pour exporter par programme de nombreuses tables vers des formats simples comme CSV.

p> Tout d'abord, installez le package en utilisant le lien ci-dessus. Le code ci-dessous crée un répertoire, fait défiler les tables et exporte chaque table au format CSV.

create or replace directory temp_dir as 'C:\temp';

begin
    for tables in
    (
        select
            owner||'_'||table_name||'.csv' file_name,
            'select * from "'||owner||'"."'||table_name||'"' v_sql
        from dba_tables
        where owner = 'XYZ'
            and table_name like 'XYZ%'
        order by 1
    ) loop
        data_dump
        (
            query_in        => tables.v_sql,
            file_in         => tables.file_name,
            directory_in    => 'TEMP_DIR',
            delimiter_in    => ',',
            header_row_in   => true
        );
    end loop;
end;
/


1 commentaires

C'était super ... merci beaucoup!