it-swarm.it

Come posso scaricare le tabelle del database Oracle in un file CSV?

Devo recuperare alcuni dati da un database Oracle 11g versione 1 e fornirli come uno o più file CSV. I dati risiedono in più tabelle e/o viste. Tutto ciò dovrebbe funzionare tramite la riga di comando. Quale sarebbe l'approccio migliore a questo?

18
aPhilRa

Arun,

ora che sqlcl è disponibile da Oracle SQL Developer 4.1 EA2 (4.1.0.18.37) puoi usarlo molto come il vecchio e famoso sqlplus. sqlcl ha un'impostazione del formato di output per csv

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

per maggiori informazioni su checkout sqlcl blog di Kris

prima che sqlcl fosse il più semplice per questo era usare APEX ed esportare il rapporto in CSV. Con il semplice vecchio sqlplus puoi farlo usando

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

Funziona meglio se i risultati devono essere scritti su un server delle applicazioni o un client. Se devono essere scritti sul server di database, utl_file potrebbe essere un'opzione migliore.

Ronald.

11
ik_zelf

Dovresti guardare il pacchetto TL_FILE incorporato. Esistono diversi modi per utilizzarlo.

  1. È possibile scrivere un numero qualsiasi di procedure in pacchetti che utilizzano il pacchetto UTL_FILE per scrivere in qualsiasi numero di file. Queste procedure possono quindi essere richiamate da quasi tutte le applicazioni incluso SQL * Plus.

  2. È possibile scrivere uno script PL/SQL per fare lo stesso lavoro e chiamare lo script dalla stessa riga comandi SQL * Plus specificando @scriptname sulla riga comandi.

  3. È possibile incollare un blocco utilizzando UTL_FILE direttamente in SQL * Plus, ma questo dovrebbe essere utilizzato solo per le esportazioni una volta e anche in questo caso potrebbe non essere il percorso migliore.

Nella loro più semplice un'esportazione di file usando UTL_FILE sarebbe composta da una chiamata a FOPEN , una o più chiamate a PUT_LINE e un chiama a FCLOSE .

8
Leigh Riffel

Se le prestazioni rappresentano un problema, è consigliabile prendere in considerazione gli strumenti dei fornitori.

Ho valutato strumenti da BMC, Wisdomforce, CoSort, DBCrane. Sono tutti significativamente più veloci di spool, utl_file o tabella esterna. Stiamo usando DBCrane perché il mio capo non voleva spendere troppo in licenza.

4
Lei

Puoi usare Python e cx_Oracle per estrarre i dati su disco in formato CSV.

Ecco come ti connetti a Oracle usando cx_Oracle:

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

Dopo il recupero dei dati è possibile eseguire il ciclo Python e salvare i dati in formato 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')

Ho usato questo approccio quando ho scritto TableHunter-For-Oracle

3
Alex Buzunov