Oracle veritabanı tablolarını bir csv dosyalarına nasıl kaldırabilirim?


18

Bir Oracle 11g yayın 1 veritabanından belirli verileri almak ve bir veya daha fazla CSV dosyası olarak sağlamak gerekiyor. Veriler birden çok tabloda ve / veya görünümde bulunur. Bütün bunlar komut satırı üzerinden çalışmalıdır. Buna en iyi yaklaşım ne olabilir?

Yanıtlar:


11

Koşu,

sqlcl artık Oracle SQL Developer 4.1 EA2'den (4.1.0.18.37) kullanılabilir olduğuna göre, eski ve ünlü sqlplus gibi çok kullanabilirsiniz. sqlcl, csv için bir çıktı biçimi ayarına sahiptir

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

sqlcl checkout Kris 'blog hakkında daha fazla bilgi için

sqlcl bunun için en kolay olan önce APEX kullanmak ve raporu csv. Düz eski sqlplus'ta bunu kullanarak

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

Sonuçların bir uygulama sunucusuna veya istemciye yazılması gerekiyorsa, bu en iyi sonucu verir. Veritabanı sunucusuna yazılması gerekiyorsa, utl_file daha iyi bir seçenek olabilir.

Ronald.


8

Sen inşa bakmak gerekir UTL_FILE paketinin. Kullanmanın birkaç yolu vardır.

  1. İstediğiniz sayıda dosyaya yazmak için UTL_FILE paketini kullanan paketlere istediğiniz sayıda yordam yazabilirsiniz. Bu prosedürler daha sonra SQL * Plus dahil olmak üzere hemen hemen tüm uygulamalardan çağrılabilir.

  2. Aynı işi yapmak için bir PL / SQL komut dosyası yazabilir ve komut satırında @scriptname belirterek SQL * Plus komut satırından komut dosyasını çağırabilirsiniz.

  3. UTL_FILE kullanarak bir bloğu doğrudan SQL * Plus'a yapıştırabilirsiniz, ancak bu sadece bir kez dışa aktarma için kullanılmalıdır ve o zaman bile en iyi yol olmayabilir.

En basit haliyle, UTL_FILE kullanarak bir dosya dışa aktarma işlemi, FOPEN çağrısı , bir veya daha fazla PUT_LINE çağrısı ve FCLOSE çağrısından oluşur .


4

Performans önemliyse, satıcıların araçlarını dikkate almak isteyebilirsiniz.

BMC, Wisdomforce, CoSort, DBCrane araçlarını değerlendirdim. Hepsi biriktirme, utl_file veya harici tablodan önemli ölçüde daha hızlıdır. DBCrane kullanıyoruz çünkü patronum lisansa çok fazla harcamak istemiyordu.


3

CSV formatında diske veri çıkarmak için Python ve cx_Oracle modülünü kullanabilirsiniz.

Oracle'a cx_Oracle kullanarak şu şekilde bağlanabilirsiniz:

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

Veri getirildikten sonra Python listesinde dolaşabilir ve verileri CSV biçiminde kaydedebilirsiniz.

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')

Bu yaklaşımı, TableHunter-For-Oracle için yazarken kullandım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.