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 ...
4 Réponses :
vous pouvez essayer les étapes suivantes.
C'est une solution de très haut niveau. Mais je suis sûr que cela fonctionnera.
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
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.
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;
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; /
C'était super ... merci beaucoup!
Je vous suggère de jeter un œil à l’article Oracle-Base de Tim Hall sur ce sujet a>. 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.