Wie kann ich Oracle-Datenbanktabellen in eine CSV-Datei entladen?

18

Ich muss bestimmte Daten aus einer Oracle 11g Release 1-Datenbank abrufen und als eine oder mehrere CSV-Dateien bereitstellen. Die Daten befinden sich in mehreren Tabellen und / oder Ansichten. All dies sollte über die Kommandozeile funktionieren. Was wäre der beste Ansatz dafür?

aPhilRa
quelle

Antworten:

11

Arun,

Jetzt, da sqlcl in Oracle SQL Developer 4.1 EA2 (4.1.0.18.37) verfügbar ist , können Sie es wie das alte und berühmte sqlplus verwenden. sqlcl hat eine Ausgabeformateinstellung für csv

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

Weitere Informationen zu SQLCL finden Sie in Kris 'Blog

vor sqlcl war es am einfachsten, APEX zu verwenden und den Bericht in csv zu exportieren. In plain old sqlplus können Sie dies mit tun

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

Dies funktioniert am besten, wenn die Ergebnisse auf einem Anwendungsserver oder -client geschrieben werden sollen. Wenn sie auf dem Datenbankserver geschrieben werden müssen, ist utl_file möglicherweise eine bessere Option.

Ronald.

ik_zelf
quelle
8

Sie sollten sich das eingebaute UTL_FILE- Paket ansehen . Es gibt verschiedene Möglichkeiten, wie Sie es verwenden können.

  1. Sie können beliebig viele Prozeduren in Pakete schreiben, die das UTL_FILE-Paket verwenden, um in beliebig viele Dateien zu schreiben. Diese Prozeduren können dann von fast jeder Anwendung einschließlich SQL * Plus aufgerufen werden.

  2. Sie können ein PL / SQL-Skript schreiben, um die gleiche Arbeit zu leisten, und das Skript über die SQL * Plus-Befehlszeile selbst aufrufen, indem Sie in der Befehlszeile @scriptname angeben.

  3. Sie können einen Block mit UTL_FILE direkt in SQL * Plus einfügen, dies sollte jedoch nur für einmalige Exporte verwendet werden, und selbst dann ist es möglicherweise nicht die beste Route.

In ihrer einfachsten Form würde ein Dateiexport mit UTL_FILE aus einem Aufruf von FOPEN , einem oder mehreren Aufrufen von PUT_LINE und einem Aufruf von FCLOSE bestehen .

Leigh Riffel
quelle
4

Wenn die Leistung von Bedeutung ist, sollten Sie Tools von Anbietern in Betracht ziehen.

Ich habe Tools von BMC, Wisdomforce, CoSort, DBCrane evaluiert. Sie sind alle erheblich schneller als Spool, utl_file oder externe Tabellen. Wir verwenden DBCrane, weil mein Chef nicht zu viel für Lizenzen ausgeben wollte.

Lei
quelle
3

Sie können das Python- und das cx_Oracle-Modul verwenden, um Daten im CSV-Format auf die Festplatte zu extrahieren.

So stellen Sie mit cx_Oracle eine Verbindung zu Oracle her:

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

Nach dem Datenabruf können Sie die Python-Liste durchlaufen und Daten im CSV-Format speichern.

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')

Ich habe diesen Ansatz verwendet, als ich TableHunter-For-Oracle geschrieben habe

Alex Buzunov
quelle