Bagaimana saya bisa menurunkan tabel database Oracle ke file csv?

18

Saya perlu mengambil data tertentu dari Oracle 11g rilis 1 database dan menyediakannya sebagai satu atau lebih file CSV. Data berada di beberapa tabel dan / atau tampilan. Semua ini harus bekerja melalui baris perintah. Apa yang akan menjadi pendekatan terbaik untuk ini?

aPhilRa
sumber

Jawaban:

11

Arun,

sekarang sqlcl tersedia dari Oracle SQL Developer 4.1 EA2 (4.1.0.18.37) Anda dapat menggunakannya sangat mirip dengan sqlplus lama dan terkenal. sqlcl memiliki pengaturan format output untuk csv

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

untuk info lebih lanjut tentang checkout sqlcl blog Kris

sebelum sqlcl sekitar termudah untuk ini adalah menggunakan APEX dan mengekspor laporan ke csv. Dalam sqlplus tua biasa Anda dapat melakukan ini dengan menggunakan

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

Ini bekerja paling baik jika hasilnya ditulis pada server aplikasi atau klien. Jika harus ditulis di server database, utl_file mungkin merupakan opsi yang lebih baik.

Ronald.

ik_zelf
sumber
8

Anda harus melihat paket UTL_FILE bawaan . Ada beberapa cara Anda bisa menggunakannya.

  1. Anda bisa menulis sejumlah prosedur dalam paket yang menggunakan paket UTL_FILE untuk menulis ke sejumlah file. Prosedur ini kemudian dapat dipanggil dari hampir semua aplikasi termasuk SQL * Plus.

  2. Anda bisa menulis skrip PL / SQL untuk melakukan pekerjaan yang sama dan memanggil skrip dari baris perintah SQL * Plus itu sendiri dengan menetapkan @scriptname pada baris perintah.

  3. Anda bisa menempelkan blok menggunakan UTL_FILE langsung ke SQL * Plus, tetapi ini hanya boleh digunakan untuk satu kali ekspor dan bahkan mungkin itu bukan rute terbaik.

Sederhananya , ekspor file menggunakan UTL_FILE akan terdiri dari panggilan ke FOPEN , satu atau lebih panggilan ke PUT_LINE , dan panggilan ke FCLOSE .

Leigh Riffel
sumber
4

Jika kinerja menjadi masalah, Anda mungkin ingin mempertimbangkan alat dari vendor.

Saya telah mengevaluasi alat dari BMC, Wisdomforce, CoSort, DBCrane. Mereka semua secara signifikan lebih cepat daripada spool, utl_file atau tabel eksternal. Kami menggunakan DBCrane karena bos saya tidak ingin menghabiskan terlalu banyak untuk lisensi.

Lei
sumber
3

Anda dapat menggunakan modul Python dan cx_Oracle untuk mengekstrak data ke disk dalam format CSV.

Inilah cara Anda terhubung ke Oracle menggunakan cx_Oracle:

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

Setelah pengambilan data, Anda dapat mengulang daftar Python dan menyimpan data dalam format 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')

Saya menggunakan pendekatan ini ketika saya menulis TableHunter-For-Oracle

Alex Buzunov
sumber