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.