Comment puis-je décharger des tables de base de données Oracle dans des fichiers csv?


18

J'ai besoin de récupérer certaines données d'une base de données Oracle 11g version 1 et de les fournir sous la forme d'un ou plusieurs fichiers CSV. Les données résident dans plusieurs tables et / ou vues. Tout cela devrait fonctionner via la ligne de commande. Quelle serait la meilleure approche à ce sujet?

Réponses:


11

Arun,

maintenant que sqlcl est disponible à partir d' Oracle SQL Developer 4.1 EA2 (4.1.0.18.37), vous pouvez l'utiliser un peu comme l'ancien et célèbre sqlplus. sqlcl a un paramètre de format de sortie pour csv

set sqlformat csv
spool x.csv
select * from yourtable[s];
spool off

pour plus d'informations sur sqlcl checkout, le blog de Kris

avant que sqlcl ne soit plus simple, il fallait utiliser APEX et exporter le rapport vers csv. Dans plain old sqlplus, vous pouvez le faire en utilisant

set lines 9999 -- the appropriate size
set head off  -- no header lines
set colsep ';' --column separator to ;
set pages 0 -- no pages
set feed off
select your data;
spool to_tofile
/
spool off

Cela fonctionne mieux si les résultats doivent être écrits sur un serveur d'applications ou un client. S'ils doivent être écrits sur le serveur de base de données, utl_file pourrait être une meilleure option.

Ronald.


8

Vous devriez regarder le package UTL_FILE intégré. Il existe plusieurs façons de l'utiliser.

  1. Vous pouvez écrire n'importe quel nombre de procédures dans des packages qui utilisent le package UTL_FILE pour écrire dans un nombre illimité de fichiers. Ces procédures peuvent ensuite être appelées à partir de presque toutes les applications, y compris SQL * Plus.

  2. Vous pouvez écrire un script PL / SQL pour effectuer le même travail et appeler le script à partir de la ligne de commande SQL * Plus elle-même en spécifiant @scriptname sur la ligne de commande.

  3. Vous pouvez coller un bloc en utilisant UTL_FILE directement dans SQL * Plus, mais cela ne doit être utilisé que pour des exportations uniques et même alors, ce n'est peut-être pas la meilleure route.

Dans leur forme la plus simple, une exportation de fichier utilisant UTL_FILE serait composée d'un appel à FOPEN , d'un ou plusieurs appels à PUT_LINE et d'un appel à FCLOSE .


4

Si les performances sont un problème, vous voudrez peut-être envisager les outils des fournisseurs.

J'ai évalué des outils de BMC, Wisdomforce, CoSort, DBCrane. Ils sont tous beaucoup plus rapides que le spool, le fichier utl ou la table externe. Nous utilisons DBCrane parce que mon patron ne voulait pas dépenser trop pour la licence.


3

Vous pouvez utiliser le module Python et cx_Oracle pour extraire les données sur disque au format CSV.

Voici comment vous connecter à Oracle à l'aide de cx_Oracle:

constr='scott/tiger@localhost:1521/ORCL12'
con = cx_Oracle.connect(constr)
cur = con.cursor()

Après la récupération des données, vous pouvez parcourir la liste Python et enregistrer les données au format CSV.

for i, chunk in enumerate(chunks(cur)):
    f_out.write('\n'.join([column_delimiter.join(row[0]) for row in chunk]))
    f_out.write('\n')

J'ai utilisé cette approche lorsque j'ai écrit TableHunter-For-Oracle

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.