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?
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.
Měli byste se podívat na vestavěný balíček TL_FILE . Existuje několik způsobů, jak jej použít.
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.
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.
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 .
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.
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