Як я можу вивантажити таблиці баз даних Oracle у файли csv?


18

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

Відповіді:


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 замовлення блогу Kris '

перш ніж 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.

Рональд.


8

Ви повинні подивитися на вбудований пакет UTL_FILE . Є кілька способів, якими ви могли б користуватися.

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

  2. Ви можете написати сценарій PL / SQL, щоб виконати ту саму роботу і викликати скрипт із самого командного рядка SQL * Plus, вказавши @ командний рядок у командному рядку.

  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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.