Как выгрузить таблицы базы данных Oracle в файлы csv?

18

Мне нужно извлечь определенные данные из базы данных Oracle 11g release 1 и предоставить их в виде одного или нескольких файлов CSV. Данные находятся в нескольких таблицах и / или представлениях. Все это должно работать через командную строку. Каков наилучший подход к этому?

aPhilRa
источник

Ответы:

11

Арун,

теперь, когда sqlcl доступен в Oracle SQL Developer 4.1 EA2 (4.1.0.18.37), вы можете использовать его во многом как старый и известный sqlplus. sqlcl имеет настройку выходного формата для csv

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

для получения дополнительной информации о sqlcl оформить блог Криса

прежде чем sqlcl был проще всего для этого было использовать APEX и экспортировать отчет в csv. В простом старом sqlplus вы можете сделать это с помощью

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

Это работает лучше всего, если результаты должны быть записаны на сервере приложений или клиенте. Если они должны быть записаны на сервере базы данных, лучше использовать utl_file.

Рональд.

ik_zelf
источник
8

Вы должны взглянуть на встроенный пакет UTL_FILE . Есть несколько способов использовать его.

  1. Вы можете написать любое количество процедур в пакетах, которые используют пакет UTL_FILE для записи в любое количество файлов. Эти процедуры могут быть вызваны практически из любого приложения, включая SQL * Plus.

  2. Вы можете написать скрипт PL / SQL для выполнения той же работы и вызвать скрипт из самой командной строки SQL * Plus, указав @scriptname в командной строке.

  3. Вы можете вставить блок, используя UTL_FILE, непосредственно в SQL * Plus, но это следует использовать только для однократного экспорта, и даже в этом случае он может оказаться не лучшим маршрутом.

В простейшем случае экспорт файла с использованием UTL_FILE будет состоять из вызова FOPEN , одного или нескольких вызовов PUT_LINE и вызова FCLOSE .

Ли Риффель
источник
4

Если производительность является проблемой, вы можете рассмотреть инструменты от поставщиков.

Я оценил инструменты от BMC, Wisdomforce, CoSort, DBCrane. Все они значительно быстрее, чем спул, utl_file или внешняя таблица. Мы используем DBCrane, потому что мой начальник не хотел тратить слишком много на лицензию.

лей
источник
3

Вы можете использовать Python и модуль cx_Oracle для извлечения данных на диск в формате CSV.

Вот как вы подключаетесь к Oracle, используя cx_Oracle:

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

После получения данных вы можете просмотреть список Python и сохранить данные в формате 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')

Я использовал этот подход, когда писал TableHunter-For-Oracle

Алекс Бузунов
источник