¿Cómo puedo descargar las tablas de la base de datos Oracle en un archivo csv?


18

Necesito recuperar ciertos datos de una base de datos Oracle 11g versión 1 y proporcionarlos como uno o más archivos CSV. Los datos residen en múltiples tablas y / o vistas. Todo esto debería funcionar a través de la línea de comando. ¿Cuál sería el mejor enfoque para esto?

Respuestas:


11

Arun

ahora que sqlcl está disponible en Oracle SQL Developer 4.1 EA2 (4.1.0.18.37) , puede usarlo como el antiguo y famoso sqlplus. sqlcl tiene una configuración de formato de salida para csv

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

para más información sobre el pago de sqlcl en el blog de Kris

antes de que sqlcl fuera más fácil, esto era usar APEX y exportar el informe a csv. En el viejo sqlplus simple puedes hacer esto 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

Esto funciona mejor si los resultados se escriben en un servidor de aplicaciones o cliente. Si tienen que escribirse en el servidor de la base de datos, utl_file podría ser una mejor opción.

Ronald


8

Debería mirar el paquete UTL_FILE integrado . Hay varias formas de usarlo.

  1. Puede escribir cualquier cantidad de procedimientos en paquetes que usen el paquete UTL_FILE para escribir en cualquier cantidad de archivos. Estos procedimientos se pueden invocar desde casi cualquier aplicación, incluido SQL * Plus.

  2. Puede escribir un script PL / SQL para hacer el mismo trabajo y llamar al script desde la línea de comando SQL * Plus especificando @scriptname en la línea de comando.

  3. Puede pegar un bloque usando UTL_FILE directamente en SQL * Plus, pero esto solo debe usarse para exportaciones de una sola vez e incluso entonces podría no ser la mejor ruta.

En su forma más simple, una exportación de archivos usando UTL_FILE estaría compuesta por una llamada a FOPEN , una o más llamadas a PUT_LINE y una llamada a FCLOSE .


4

Si el rendimiento es una preocupación, es posible que desee considerar las herramientas de los proveedores.

He evaluado herramientas de BMC, Wisdomforce, CoSort, DBCrane. Todos son significativamente más rápidos que spool, utl_file o table externo. Estamos usando DBCrane porque mi jefe no quería gastar demasiado en licencias.


3

Puede usar Python y el módulo cx_Oracle para extraer datos al disco en formato CSV.

Así es como te conectas a Oracle usando cx_Oracle:

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

Después de la búsqueda de datos, puede recorrer la lista de Python y guardar los datos en 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')

Usé este enfoque cuando escribí TableHunter-For-Oracle

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.