Jak mogę zwolnić tabele bazy danych Oracle do plików CSV?

18

Muszę pobrać pewne dane z bazy danych Oracle 11g wydanie 1 i podać je jako jeden lub więcej plików CSV. Dane znajdują się w wielu tabelach i / lub widokach. Wszystko to powinno działać z poziomu wiersza poleceń. Jakie byłoby najlepsze podejście do tego?

aPhilRa
źródło

Odpowiedzi:

11

Bieg,

teraz, gdy sqlcl jest dostępny z Oracle SQL Developer 4.1 EA2 (4.1.0.18.37) , możesz go używać podobnie jak stary i sławny sqlplus. sqlcl ma ustawienie formatu wyjściowego dla csv

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

aby uzyskać więcej informacji o sqlcl kasie blog Krisa

zanim sqlcl był najłatwiejszy, można było użyć APEX-a i wyeksportować raport do csv. W zwykłym starym sqlplus możesz to zrobić za pomocą

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

Działa to najlepiej, jeśli wyniki mają zostać zapisane na serwerze aplikacji lub kliencie. Jeśli muszą być zapisane na serwerze bazy danych, lepszym rozwiązaniem może być plik_spl.

Ronald.

ik_zelf
źródło
8

Powinieneś spojrzeć na wbudowany pakiet UTL_FILE . Jest kilka sposobów na wykorzystanie go.

  1. Możesz napisać dowolną liczbę procedur w pakietach, które używają pakietu UTL_FILE do zapisu do dowolnej liczby plików. Procedury te można następnie wywołać z niemal dowolnej aplikacji, w tym SQL * Plus.

  2. Możesz napisać skrypt PL / SQL, aby wykonać tę samą pracę i wywołać skrypt z poziomu wiersza poleceń SQL * Plus, podając @scriptname w wierszu polecenia.

  3. Możesz wkleić blok przy użyciu UTL_FILE bezpośrednio do SQL * Plus, ale należy tego użyć tylko do jednorazowego eksportu i nawet wtedy może nie być najlepszą trasą.

W najprostszym przypadku eksport pliku przy użyciu UTL_FILE składałby się z wywołania do FOPEN , jednego lub więcej wywołań do PUT_LINE i wywołania do FCLOSE .

Leigh Riffel
źródło
4

Jeśli problemem jest wydajność, możesz rozważyć użycie narzędzi od dostawców.

Oceniłem narzędzia od BMC, Wisdomforce, CoSort, DBCrane. Wszystkie są znacznie szybsze niż bufor, plik utl_file lub tabela zewnętrzna. Używamy DBCrane, ponieważ mój szef nie chciał wydawać zbyt dużo na licencję.

Lei
źródło
3

Możesz użyć Pythona i modułu cx_Oracle do wyodrębnienia danych na dysk w formacie CSV.

Oto jak połączyć się z Oracle za pomocą cx_Oracle:

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

Po pobraniu danych możesz przeglądać listę Pythona i zapisywać dane w formacie 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')

Zastosowałem to podejście, kiedy napisałem TableHunter-For-Oracle

Alex Buzunov
źródło