it-swarm-eu.dev

Jak mohu uvolnit databázové tabulky Oracle do souborů CSV?

Potřebuji načíst určitá data z databáze Oracle 11g release 1 a poskytnout je jako jeden nebo více souborů CSV. Data jsou umístěna ve více tabulkách a/nebo pohledech. To vše by mělo fungovat přes příkazový řádek. Jaký by k tomu byl nejlepší přístup?

18
aPhilRa

Běh,

nyní, když je sqlcl k dispozici od Oracle SQL Developer 4.1 EA2 (4.1.0.18.37) , můžete jej použít podobně jako starý a slavný sqlplus. sqlcl má nastavení výstupního formátu pro csv

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

pro více informací o pokladně sqlcl Krisův blog

před tím, než byl sqlcl nejjednodušší, bylo použít APEX a exportovat zprávu do CSV. V prostém starém sqlplus to můžete udělat 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

Toto funguje nejlépe, pokud mají být výsledky zapsány do aplikačního serveru nebo klienta. Pokud musí být zapsány na databázový server, může být lepší volbou utl_file.

Ronalde.

11
ik_zelf

Měli byste se podívat na vestavěný balíček TL_FILE . Existuje několik způsobů, jak jej použít.

  1. V balíčcích, které používají balíček UTL_FILE k zápisu do libovolného počtu souborů, byste mohli napsat libovolný počet procedur. Tyto procedury pak lze vyvolat z téměř jakékoli aplikace včetně SQL * Plus.

  2. Mohli byste napsat skript PL/SQL, který provede stejnou práci, a vyvolat skript přímo z příkazového řádku SQL * Plus zadáním @scriptname na příkazovém řádku.

  3. Blok můžete vložit pomocí UTL_FILE přímo do SQL * Plus, ale to by mělo být použito pouze pro jednorázový export a ani to nemusí být nejlepší cesta.

Ve své nejjednodušší podobě by export souboru pomocí UTL_FILE sestával z volání na FOPEN , jednoho nebo více volání na PUT_LINE a volání na FCLOSE .

8
Leigh Riffel

Pokud se jedná o výkon, můžete zvážit nástroje od dodavatelů.

Vyhodnotil jsem nástroje od BMC, Wisdomforce, CoSort, DBCrane. Všechny jsou výrazně rychlejší než spool, utl_file nebo externí tabulka. Používáme DBCrane , protože můj šéf nechtěl utrácet příliš mnoho za licenci.

4
Lei

Můžete použít Python a modul cx_Oracle) k extrahování dat na disk ve formátu CSV.

Takto se připojíte k Oracle pomocí cx_Oracle:

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

Po načtení dat můžete procházet seznamem Python) a ukládat data ve formátu 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')

Tento přístup jsem použil, když jsem psal TableHunter-For-Oracle

3
Alex Buzunov