Una manera muy simple de exportar datos de una consulta, tabla, etc. de una base de datos oracle a un fichero plano es utilizar el comando SPOOL de SQLPlus. De esta manera no es necesario depender de herramientas visuales, que no siempre están disponibles, o no siempre funcionan como queremos.
Además, se pueden utilizar las funciones de formato de Oracle en la misma sentencia SELECT para que los datos se generen ya en el formato que necesitemos.
Ejemplo de exportación de datos a un fichero plano desde SQLPlus
Si, por ejemplo, queremos recuperar algunos datos de todos los registros de una tabla de clientes ordenados por fecha de alta, sólo hay que abrir una sesión de SQLPlus y ejecutar esta serie de comandos:
SQL> SET HEADING OFF SQL> SET FEEDBACK OFF SQL> SPOOL C:\datos_de_clientes.txt SQL> SELECT 'Cliente ' || CLI_NOMBRE || ', ' || CLI_NIF || '. Fecha alta: ' || TO_CHAR(CLI_FECHAALTA,'YYYY-MM-DD') FROM TABLA_CLIENTES ORDER BY CLI_FECHAALTA DESC; SQL> SPOOL OFF; SQL> SET FEEDBACK ON SQL> SET HEADING ON
Las primeras líneas ocultan las cabeceras que contendrían el nombre de los campos, y no nos interesan porque nosotros sólo queremos los datos. Spool dirige la salida de datos hacia el fichero 'datos_de_clientes.txt' de la unidad C de nuestra máquina local.
Esta técnica también se puede emplear para menesteres más sofisticados como la construcción dinámica de scripts a partir de los metadatos que tenemos disponibles en nuestra BD.
Libros de Administración Oracle (DBA) y PL/SQL
¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.
Los libros que ves a continuación son una selección de los que a mi me parecen más interesantes para aprender administración y desarrollo PL/SQL, teniendo en cuenta precio y temática, espero que te puedan ser de utilidad:
- eBooks de Oracle gratuítos para la versión Kindle, o muy baratos (menos de 4€):
- Libros recomendados de Oracle
Excelente!!... me sirvio de
Subido por Joan (no verificado) el 2 Noviembre, 2013 - 14:38
Hola, existe algun modo de
Subido por Juan Manuel (no verificado) el 26 Diciembre, 2013 - 20:34
Hola puedo con el commando
Subido por Francisco (no verificado) el 4 Febrero, 2014 - 21:29
Hola
puedo con el commando spool ir agregando datos a un archivo .xls o .csv?
Gracias de antemano
Hola henry, has puesto el
Subido por Carlos el 3 Agosto, 2014 - 19:33
Hola henry, has puesto el punto y coma al final de la select?
Gracias por las respuestas,
Subido por Kimbies (no verificado) el 18 Septiembre, 2014 - 22:20
Gracias por las respuestas, pero cómo lo haría si necesito ejecutar un Stored Procedure, el cual retorna la data que necesito en un REF CURSOR?
Favor me pueden ayudar a
Subido por Frank (no verificado) el 3 Octubre, 2014 - 22:25
Favor me pueden ayudar a solucionar este error? sqlplus
"result of string concatenation is too long"
Encontre esto pero no salen los resgistros completos:
SET LONG 100000;
SPOOL test_clob.txt
SELECT to_clob(lpad('A',4000,'A')) <- Aca inclui la query con un laargo de 4000
||'B'
||to_clob(lpad('C',4000,'C')) <- Aca inclui la query con un largo de 1000
FROM dual;
SPOOL OFF;
Hola, su ayuda por favor,
Subido por Paula (no verificado) el 11 Noviembre, 2014 - 17:33
Hola, su ayuda por favor, tengo TOAD y quiero exportar a un archivo csv, dado que cuando exporto a excel, me separa en varias hojas cuando sobrepasa los 65000 registros.
Gracias por sus comentarios!!
Puedes hacerlo con SQLPlus
Subido por Carlos el 11 Noviembre, 2014 - 23:17
En respuesta a Hola, su ayuda por favor, por Paula (no verificado)
Puedes hacerlo con SQLPlus con las indicaciones de este post, no hace falta que utilices TOAD. Lo único que tienes que cambiar es la SELECT e ir concatenando las comillas, comas, etc. para que te vaya montando los campos en formato csv.
Y si quieres probar una manera más fácil, en esta web he encontrado un truquillo que si funciona bien es de lo más sencillo. Parece que hay hints para forzar el formato de salida de las queries, así que para sacar los datos de una tabla en formato csv, con el mismo método de SPOOL del post sólo tendrías que hacer algo así como:
Exite alguna manera de
Subido por Abril (no verificado) el 23 Noviembre, 2014 - 05:00
Exite alguna manera de guardar la salida de una consulta en un archivo, pero sin que la salida de la consulta se vea por pantalla.
Gracias.
Para que no se muestre por
Subido por Dataprix el 24 Noviembre, 2014 - 23:48
En respuesta a Exite alguna manera de por Abril (no verificado)
Para que no se muestre por pantalla, puedes ejecutar la consulta de Oracle en background, incluyendo el Spool para hacer la exportación de los datos al fichero de salida.
Tienes que crear un fichero con extensión .sql con las mismas lineas que se indican en el post:
Y después, desde linea de comandos ejecutas con SQLPlus el fichero en background incluyendo un & al final del comando. Algo así:
hola buena tarde pido su
Subido por carlos sepulveda (no verificado) el 3 Diciembre, 2014 - 23:07
hola buena tarde
pido su ayuda urgentemente, por cuanto el número de cédula de un empleado para hacer una transferencia no aparece al momento de exportar el archivo desde oracle SQL Developent para convertirlo en archivo plano. agradezco enormemente sus respuestas
Si es un campo normal y no
Subido por Jose Oracle (no verificado) el 10 Diciembre, 2014 - 12:18
En respuesta a hola buena tarde pido su por carlos sepulveda (no verificado)
Si es un campo normal y no aparece es porque no está incluído en la SELECT.
¿Si ejecutas la select para verla por pantalla te aparecen los datos del campo?
Hola la informacion se me
Subido por Rodigilber Gonzalez (no verificado) el 11 May, 2015 - 15:50
Existe añguna forma de
Subido por Giancarlo Casas (no verificado) el 11 Junio, 2015 - 22:15
si quisiera usar ese
Subido por Edward R (no verificado) el 28 Agosto, 2015 - 19:15
si quisiera usar ese procedimiento en linux desde shell funciona de la misma manera el spool en linux?
gracias.
Puedes utilizar el spool
Subido por Carlos el 31 Agosto, 2015 - 12:34
En respuesta a si quisiera usar ese por Edward R (no verificado)
Puedes utilizar el spool igualmente en Linux, una vez dentro de SQLPlus los comandos SQL y de Spool son los mismos para cualquier sistema.
Hola amigo tengo una duda
Subido por carlos.segura (no verificado) el 17 Septiembre, 2015 - 04:17
Hola amigo tengo una duda cuando exporto mi consulta a excel me coloca toda la informacion en una columna, como puedo hacer para que me lo separe?. de antemano gracias
Hola Carlos Puedes modificar
Subido por Carlos el 17 Septiembre, 2015 - 12:25
En respuesta a Hola amigo tengo una duda por carlos.segura (no verificado)
Hola Carlos
Puedes modificar la consulta para que te genere los datos en formato CSV, es decir, los datos de cada columna separados por comas y los strings entre comillas.
De esta manera después puedes importar el fichero en Excel indicando que es formato CSV (ponle de extensión .csv), y Excel ya te dejará cada columna en su sitio.
Hola gracias por tu
Subido por carlos.segura (no verificado) el 21 Septiembre, 2015 - 04:27
En respuesta a Hola Carlos Puedes modificar por Carlos
Hola gracias por tu respuesta, mira esta es mi consulta
SET SPACE 0 SET LINESIZE 75 SET PAGESIZE 0 SET HEADING OFF SET MARKUP HTML OFF SPOOL OFF SET COLSEP " " SPOOL archivo1.csv select "EMAIL_ADDR" ||','|| "NOMBRE" ||','|| "SPECIALITY" from iof_cam; SPOOL OFF;pero cuando abro el archivo me sigue saliendo en una sola columna, no me podrias decir cual es mi error o que es lo que tengo que modificar?
gracias
Las comillas las has puesto
Subido por Carlos el 21 Septiembre, 2015 - 11:59
En respuesta a Hola gracias por tu por carlos.segura (no verificado)
Las comillas las has puesto directamente con el nombre del campo, y tienes que ponerlas como un string, si te miras el fichero de resultado verás que no te escribe ninguna comilla doble. Para que te incluya bien las comillas deberías cambiar la select por algo así:
Así los datos de cada campo deberían salirte con comilla doble, en formato csv, y Excel tendría que dejar cada campo en una columna al importar el fichero .csv
Saludos,
Hola carlos soy nuevo en esto
Subido por Hilario (no verificado) el 29 Septiembre, 2015 - 15:27
Hola carlos
soy nuevo en esto de sql y ya he hecho varios query pero necesito ponerle encabezados a los reportes generados por estos query y no he podido hacerlo, hay alguna forma de poder hacerlo?
Muchas Gracias,
Saludos.
Hola Hilario Puedes incluir
Subido por Carlos el 8 Octubre, 2015 - 19:09
En respuesta a Hola carlos soy nuevo en esto por Hilario (no verificado)
Hola Hilario
Puedes incluir los encabezados en la misma sentencia select utilizando un union. El SQL sería algo parecido a esto:
Hola, como eliminar el
Subido por Anonimo (no verificado) el 30 Septiembre, 2015 - 17:01
Hola, como eliminar el mensaje "Input truncated to 9 characters" que se crea al final del archivo que se exporta en el spool.
Hola que tal mi problema es
Subido por Sergiosalgadod (no verificado) el 19 Octubre, 2015 - 22:52
Buenas tardes, necesito
Subido por PericoPalotes (no verificado) el 1 Febrero, 2016 - 16:14
Buenas tardes,
necesito realizar una descarga a un fichero plano de una tabla de Oracle de unos 36 millones de registros. he decidio realizarlo mediante un archivo sql donde ingreso la select de la tabla, y cuyo archivo sql es llamado desde el script de unix. Mi pregunta es la siguiente ¿es viable este volumen de descarga con el sqlplus?
Muchas gracias de antemano.
Esa cantidad de datos ningun
Subido por Toledo (no verificado) el 15 Abril, 2016 - 00:30
En respuesta a Buenas tardes, necesito por PericoPalotes (no verificado)
Esa cantidad de datos ningun manejador te lo va a permitir exportar sin sufrirle un poco... Aún MySQL en modo ZIP tendras que partirle la tarea.
Necesitas hacer una exportación parcial digamos de millón de registros en archivos separados... entre BDs Oracle con el DataPump lo haces rápido y te compacta el exportado...
Havia un archivo plano, las alternativas son que en el export le pongas una condición para reducir el conjunto de registros a exportar... o bien ve filtrando la tabla a una temporal y luego ve exportando esa temporal limitando el número de registros...
Recuerda que hay limitantes en algunos filesystems o medios, por si vas a enviarlo por USB, red o DVDs, dependiendo de ciertas condiciones y el tamaño de cada registro, 36millones de registros pueden sobrecargarte algunas cosas (procesador, disco, red, etc).
Suerte!
Hola, Realice un export de la
Subido por Lopez Flynn (no verificado) el 25 Agosto, 2016 - 12:41
Hola,
Realice un export de la base de datos A pero al intentar importarlos a la base B, se obtiene el error indicando que la estructura de la tabla destino no es igual a la tabla origen.
Mi duda es que si existe la manera de importar los datos ignorando las columnas agregadas en la tabla destino.
Gracias
Saludos,
Lo que puedes hacer es
Subido por Carlos el 26 Agosto, 2016 - 09:24
En respuesta a Hola, Realice un export de la por Lopez Flynn (no verificado)
Lo que puedes hacer es simplemente incluir en la select del export los nombres de los campos 'extra' de la tabla destino, dejando la parte de datos a nulo o al valor por defecto que tengan estos campos.
Saludos,
Estimado que tal: Me ha
Subido por Jose Goicochea (no verificado) el 28 Marzo, 2018 - 00:37
Estimado que tal: Me ha servido mucho la informacion . Tengo una consulta como podria hacer para ejecutar periodicamente este comando spool en un job o como podria colocarlo dentro de un procedure ya que lo he intentado pero sin exito Gracias de antemano Saludos