it-swarm.dev

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

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?

18
aPhilRa

Bieg,

teraz, gdy sqlcl jest dostępny od 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 kasie sqlcl blog Krisa

zanim narzędzie sqlcl było najłatwiejsze, 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.

11
ik_zelf

Powinieneś spojrzeć na wbudowany pakiet TL_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 go 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 FOPEN , jednego lub więcej wywołań do PUT_LINE oraz wezwanie do FCLOSE .

8
Leigh Riffel

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ę.

4
Lei

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

Oto jak łączysz się z Oracle za pomocą cx_Oracle:

constr='scott/[email protected]:1521/ORCL12'
con = cx_Oracle.connect(constr)
cur = con.cursor()

Po pobraniu danych możesz przeglądać Python 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')

Użyłem tego podejścia, kiedy napisałem TableHunter-For-Oracle

3
Alex Buzunov