it-swarm.com.de

Wie kann ich Oracle-Datenbanktabellen in CSV-Dateien entladen?

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 Befehlszeile funktionieren. Was wäre der beste Ansatz dafür?

18
aPhilRa

Arun,

jetzt, da sqlcl unter Oracle SQL Developer 4.1 EA2 (4.1.0.18.37) verfügbar ist, können Sie es ähnlich 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 checkout Kris 'Blog

bevor es sqlcl gab, war es am einfachsten, APEX zu verwenden und den Bericht nach csv zu exportieren. In einfachem altem sqlplus können Sie dies mit verwenden

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 einen Anwendungsserver oder -client geschrieben werden sollen. Wenn sie auf den Datenbankserver geschrieben werden müssen, ist utl_file möglicherweise die bessere Option.

Ronald.

11
ik_zelf

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

  1. Sie können eine beliebige Anzahl von Prozeduren in Pakete schreiben, die das UTL_FILE-Paket verwenden, um in eine beliebige Anzahl von 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 auszuführen, 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 dies möglicherweise nicht die beste Route.

Im einfachsten Fall würde ein Dateiexport mit UTL_FILE aus einem Aufruf von FOPEN , einem oder mehreren Aufrufen von PUT_LINE und a bestehen Aufruf von FCLOSE .

8
Leigh Riffel

Wenn die Leistung ein Problem darstellt, sollten Sie Tools von Anbietern in Betracht ziehen.

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

4
Lei

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

So stellen Sie mit cx_Oracle eine Verbindung zu Oracle her:

constr='scott/[email protected]: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 schrieb

3
Alex Buzunov