Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En esta sección, abordo el tema de cómo dar el formato a las consultas que hacemos a la base de datos, por medio del cliente de
Oracle, el Sql Plus.
Todos los que hemos tenido acceso a un prompt de Oracle por medio del Sql Plus, nos hemos topado con el problema de que las
consultas que hacemos, nos arrojan resultados algo revueltos como lo que se muestra a continuación:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salida… 1/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
¿Le entendieron? Ja, creo que no mucho verdad? Bueno, después de ver lo que muestro en éste post, tendrán muchas herramientas
para poder dar formato a la salida de las consultas. Así pues, comencemos:
Primero, tenemos que definir el comportamiento del área donde estaremos trabajando. Para esto, usaremos los siguientes comandos
que no requieren de un punto y coma (;):
set linesize n
Cambia el tamaño de la línea a los n caracteres. después del último caracter en un renglón, le agrega espacios para rellenar hasta el
valor asignado. Se puede abreviar como set lines n.
Por ejemplo:
USERNAME
------------------------------
PASSWORD
------------------------------
SALT
4195FE23CF28FA4E
SYSTEM
9887149C9890214A
SYS
4790272FCF800D71
USERNAME
------------------------------
PASSWORD
------------------------------
ADMAUD
A101B2757316EC78
4 rows selected.
USERNAME PASSWORD
------------------------------ ------------------------------
SALT 4195FE23CF28FA4E
SYSTEM 9887149C9890214A
SYS 4790272FCF800D71
ADMAUD A101B2757316EC78
4 rows selected.
set pagesize n
Define la cantidad de renglones que se mostrarán entre títulos. Los renglones que ocupa cada título también cuentan en n. Se puede
abreviar como set pages n. Así, en el siguiente ejemplo se vería:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salida… 2/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
USERNAME PASSWORD
------------------------------ ------------------------------
SALT 4195FE23CF28FA4E
USERNAME PASSWORD
------------------------------ ------------------------------
SYSTEM 9887149C9890214A
USERNAME PASSWORD
------------------------------ ------------------------------
SYS 4790272FCF800D71
USERNAME PASSWORD
------------------------------ ------------------------------
ADMAUD A101B2757316EC78
4 rows selected.
y con el cambio:
USERNAME PASSWORD
------------------------------ ------------------------------
SALT 4195FE23CF28FA4E
SYSTEM 9887149C9890214A
SYS 4790272FCF800D71
ADMAUD A101B2757316EC78
4 rows selected.
4 rows selected.
Dependiendo de si está prendido (on) o apagado (off), muestra o no, la cantidad de registros que se obtuvieron en la consulta:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salida… 3/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
USERNAME PASSWORD
------------------------------ ------------------------------
SALT 4195FE23CF28FA4E
SYSTEM 9887149C9890214A
SYS 4790272FCF800D71
ADMAUD A101B2757316EC78
SQL> set feedback on
SQL> /
USERNAME PASSWORD
------------------------------ ------------------------------
SALT 4195FE23CF28FA4E
SYSTEM 9887149C9890214A
SYS 4790272FCF800D71
ADMAUD A101B2757316EC78
4 rows selected.
De acuerdo a su valor, prendido (on) o apagado (off); se implementará o no, un cronometro para la consulta que se ejecute como se
muestra a continuación:
USERNAME PASSWORD
------------------------------ ------------------------------
SALT 4195FE23CF28FA4E
SYSTEM 9887149C9890214A
SYS 4790272FCF800D71
ADMAUD A101B2757316EC78
4 rows selected.
Elapsed: 00:00:00.01
Si está prendido (on), genera una pausa al iniciar la consulta y cada vez que se cumplan los n registros correspondientes al comando
set pagesize n. La pausa se “rompe” cuando se teclea [Enter].
Cuando se prende, el exceso de espacios que usa SQL*Plus para rellenar hasta cumplir con los n caracteres usados en set linesize, son
eliminados dejando sólo hasta donde llega el último caracter.
Esto no se ve al momento de ver el resultado de una consulta, sin embargo al momento de generar un archivo con spool, se verán los
resultados de manera importante. Por ejemplo:
Configuro aquí el ancho de la línea a 1,000 caracteres, con lo cual, SQL*Plus rellenará con espacios hasta completarlos.
Ahora, puedo generar un archivo de texto que llamaré file_1k_chars_raw.txt, con el resultado de una consulta a la vista
DBA_OBJECTS con todos los objetos del sistema:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salida… 4/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
OBJECT_ID OBJECT_NAME
---------- -----------------------------------------------------------
20 ICOL$
46 I_USER1
28 CON$
15 UNDO$
29 C_COBJ#
3 I_OBJ#
25 PROXY_ROLE_DATA$
...
15216 DBMS_NETWORK_ACL_UTILITY
15217 USER_NETWORK_ACL_PRIVILEGES
15218 USER_NETWORK_ACL_PRIVILEGES
15219 DBMS_NETWORK_ACL_ADMIN
15220 DBMS_NETWORK_ACL_UTILITY
15227 WRM$_DEEP_PURGE_INTERVAL
Con lo que se ve que quedó de un tamaño muy grande, 15MB. Esto es porque fueron casi 15,000 registros multiplicados por 1,000
caracteres, son 15 millones de caracteres.
Ahora con el comando prendido, veremos qué se obtiene, esta vez, mi archivo de prueba se llama file_1k_char_trim.txt:
OBJECT_ID OBJECT_NAME
---------- -----------------------------------------------------------
20 ICOL$
46 I_USER1
28 CON$
15 UNDO$
29 C_COBJ#
3 I_OBJ#
25 PROXY_ROLE_DATA$
41 I_IND1
54 I_CDEF2
...
15218 USER_NETWORK_ACL_PRIVILEGES
15219 DBMS_NETWORK_ACL_ADMIN
15220 DBMS_NETWORK_ACL_UTILITY
15227 WRM$_DEEP_PURGE_INTERVAL
Como se puede observar, sólo por quitar los espacios de relleno, bajó a tan sólo 436KB, lo cual es una diferencia drástica, en este caso
por sólo ocupar dos columnas del listado, el archivo resultante ocupa apenas el 3% del original.
Sirve para mostrar n caracteres de tipos de datos LONG, LOB, BFILE y XMLType.
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salida… 5/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
Aunque ya está obsoleto el tipo de datos LONG, puede ser que alguna aplicación vieja aún lo use, y ciertamente, las vistas del
diccionario de datos de Oracle, lo siguen usando. Por ejemplo en la vista DBA_VIEWS:
Este tipo de datos es el precursor del CLOB (hasta 8TB), es decir, es un campo de caracteres muy grande (hasta 2GB). Por sí solo,
muestra unos cuantos caracteres al hacer un query:
VIEW_NAME TEXT
------------------------------ ---------------------------------------
ALL_XML_SCHEMAS2 select u.name, s.xmldata.schema_url,
case when bitand(to_number(s.xmld
Y con la corrección:
Ahora, después de haber formateado el área de trabajo, al consultar algunas tablas, el ancho de cada columna, hace que aún así, la
información de un solo registro, se vea en varios renglones como se muestra a continuación:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salida… 6/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
8 rows selected.
Para lograr que se vea de mejor forma, tendremos que darle un correcto formato a las columnas. Para esto, tenemos el comando:
Donde:
formato es la forma en que daremos una longitud en caracteres para un tipo caracter y el formato para los datos numéricos de la
siguiente forma:
Caracter:
an [word_wrapped] donde n es la longitud de caracteres que tendrá; la palabra word_wrapped, hace que los datos contenidos por esta
columna, sean recortados a la longitud asignada sin cortar las palabras, y cada línea es justificada a la izquierda sin espacios ni
caracteres como TAB.
Numérico:
9|0 con cualquiera de los dos, se reserva una posición para el número que aparecerá, con 9, se reserva un espacio en blanco, con 0 en
vez de un espacio, se pone un 0 que ocupará la posición.; se pueden usar comas y puntos para delimitar las cifras.
Si por alguna razón, se reusa una columna que originalmente era caracter de tipo word_wrapped y después se cambia a númerico
con un formato con 0s y 9s, el número tendrá este último formato, pero justificado a la izquierda. Para evitar esto, hay que limpiar el
formato de la columna con la opción que se ve aquí después de los siguientes ejemplos.
Ejemplos:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salida… 7/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
SQL> /
Enter value for orden: 1
old 12: order by &orden
new 12: order by 1
8 rows selected.
Añadiendo títulos
Para añadir un títulos, subtítulos, encabezados, pies de página al resultado de la consulta, tenemos varios comandos: TTITLE,
BTITTLE, REPHEADER, REPFOOTER. Estos, se describen de la siguiente forma:
Si se usa la opción de comando ”, por default, pone como título la parte del select que muestra las columnas que se están trayendo,
así como el número de página y la fecha.
El encabezado (repheader) y el pie de página (repfooter), se presentan cada vez que se repiten los encabezados de un resultado de
consulta de acuerdo al valor de set pagesize.
Si se usa la otra opción, se puede poner como tal, un título predefinido por nosotros, con un salto de num_renglones (con skip) y
después de saltar el num_renglones, se centra, alínea a la izquierda o la derecha (center, left, right) o se inicia en una columna en
específico (col num_columna) a poner el texto que se ponga. Se puede repetir más veces para poner subtítulos.
Si se elige la opción off, se desactivan las opciones.
Por ejemplo:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salida… 8/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
SYSDATE
--------
15/09/08
SYSDATE
--------
15/09/08
Para desactivar los títulos, nada más se tienen que usar los comandos:
ttitle off
btitle off
Ahora, con las instrucciones break y compute, podemos agregar líneas en blanco para el resultado de las consultas, así como calcular
operaciones sobre alguna de las columnas. En el siguiente texto, muestro el formato de cada una de ellas:
break on columna
Este comando, nos permite aplicar una función a la columna1 de acuerdo al valor de la columna2. La función a aplicar será una de las
que aparecen a continuación:
Por ejemplo:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salid… 10/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
17 rows selected.
17 rows selected.
17 rows selected.
Para mostrar los valores para compute y para break, sólo se ejecutan los comandos sin ningún parámetro, Por ejemplo:
SQL> compute
COMPUTE number LABEL 'number' OF clave ON programa
SQL> break
break on programa nodup
Para limpiar los valores de cada uno de los comandos, se ejecutan las siguientes sentencias:
clear breaks
clear computes
Por ejemplo:
Cuando se requiere que al final del resultado de una consulta, se muestre un total general, se requiere agregar un break a nivel
reporte por medio del comando:
break on report
Para después, agregar como se vio en el punto anterior, un comando que calcule una función a nivel de reporte, en nuestro ejemplo,
usaré la suma como muestro en el comando siguiente:
Nota importante. Para que funcione este tipo de funciones, la columna a la que se le calculará la función, no debe ser la primera.
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salid… 12/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
OBJECT_TYPE CANTIDAD
-------------------- ----------
CONSUMER GROUP 5
INDEX PARTITION 80
SEQUENCE 93
QUEUE 19
SCHEDULE 1
TABLE PARTITION 72
RULE 1
PROCEDURE 49
OPERATOR 6
LOB PARTITION 1
WINDOW 2
LOB 120
PACKAGE 461
PACKAGE BODY 447
LIBRARY 113
RULE SET 9
PROGRAM 3
TYPE BODY 81
CONTEXT 1
TRIGGER 3
JOB CLASS 2
UNDEFINED 6
DIRECTORY 2
TABLE 856
INDEX 891
SYNONYM 2404
VIEW 2840
FUNCTION 65
WINDOW GROUP 1
CLUSTER 10
TYPE 940
RESOURCE PLAN 3
EVALUATION CONTEXT 7
JOB 6
----------
SUMA 9600
34 rows selected.
Una vez que se ha configurado todo lo que hasta el momento se ha mencionado, se puede enviar el resultado a un archivo de texto.
Con la instrucción:
spool [directorio]nombre_archivo.extensión
spool off
Donde directorio, será de acuerdo al sistema operativo con el que se esté trabajando. Si se omite éste dato, el archivo de generará en el
directorio de instalación de Oracle si se trabaja en windows, o en el directorio desde el cual, se ejecutó el sqlplus para linux o unix.
Por ejemplo:
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salid… 13/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
spool /home/oracle/datos.txt
USERNAME PASSWORD
------------------------------ ------------------------------
SALT 4195FE23CF28FA4E
SYSTEM 9887149C9890214A
SYS 4790272FCF800D71
ADMAUD A101B2757316EC78
spool off
Con esto, se generará un archivo llamado datos.txt en /home/oracle. Aquí, si se genera un registro con separación de tabuladores entre
datos y le ponemos una extensión .xls al archivo, lo podremos cargar muy facil en excel.
Conclusiones
Como se puede ver, es muy útil toda ésta información para poder presentar los resultados de las consultas ejecutadas. Los ejemplos
y formatos que muestro, son los que he usado en algún momento.
Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.
Anuncios
FILED UNDER IT-ORACLE TAGGED WITH AVG, BREAK, BREAK ON, BREAKS, BTITLE, CÓMO FORMATEAR LA
SALIDA DE UN QUERY, CLEAR, CLEAR BREAKS, CLEAR COMPUTES, COLUMN, COMPUTE, COMPUTE SUM OF,
COMPUTES, CONSULTA, DANDO FORMATO, DANDO FORMATO A LA SALIDA DE UNA CONSULTA, DAR FORMATO,
FEEDBACK, FORMAT, FORMATO, LINES, LINESIZE, MAXIMUM, MINIMUM, OFF, ON, ORACLE, PAGES, PAGESIZE, PAUSE,
QUERY, REPFOOTER, REPHEADER, SALIDA, SET, SPOOL, SQL+, SQLPLUS, SUM, TIMING, TTITLE
Benja says:
septiembre 13, 2015 en 10:10 am
La información me sirvió mucho, gracias por el aporte.
Ahora quisiera saber como hacer que se imprima solo el total de registros encontrados o borrados, es decir.. que solo muestre “4
rows selected” sin la visualizar los registros.
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salid… 14/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
i
Rate This
Lo más fácil, es que hagas un select count(*) from tabla where condiciones;
Orlando.
i
Rate This
Rafael says:
diciembre 7, 2015 en 3:17 pm
Muy buen aporte, excelente XD. Quisiera saber si existe alguna forma de indicar en una columna, que muestre los datos juntados
a la derecha; y no como es de costumbre que aparecen juntados a la izquierda. Igual gracias de antemano por la información.
i
Rate This
No hay algo como un comando que justifique la información, tendrias qué hacer uso de cosas como RPAD, LPAD, TRIM,
TO_CHAR, etcétera.
Orlando.
i
Rate This
luisbenajmin says:
enero 25, 2016 en 2:38 pm
hola una pregunta como hago para poder dar color a una fila si el archivo a exportar es .csv , ademas como hago para hacer una
consulta con parametros dinamicos es decir que a la hora que ejecute el .sql , en sqlplus me pida algun parametro para la
consulta, muchas gracias.
i
Rate This
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salid… 15/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
Si es un archivo csv, es un archivo de texto, por lo que no tiene atributos como para dar color a un registro, eso lo tendrías qué
hacer ya en la hoja de cálculo donde lo cargues.
Por otro lado, en mis scripts útiles para un DBA, podrás ver cómo paso parámetros a un archivo sql:
h ps://orlandoolguin.wordpress.com/2010/02/26/scripts-utiles-para-un-dba/
Espero te sirvan.
Orlando.
i
Rate This
Rafa VM says:
febrero 5, 2016 en 10:55 am
Buen a porte para los que empezamos en esto. Cuando Mando una búsqueda a un archivo *.csv, mi campo Razon Social con
tiene comas, entonces al abrir el csv me separa ese campo. Como podre hacer caso omiso de esas comas?
i
Rate This
Puedes poner comillas (“) para delimitar tu información y separarla por pipes (|):
“James Hetfield”|”MetallicA”
“Tom Araya”|”Slayer”
Así, podrás usar el | como delimitador de campos y luego como estará entre comillas, tomará todo el texto para subirlo como un
campo.
Ten cuidado si el campo tiene comillas en el dato que guardó porque eso te causará “ruido” en tu archivo.
Orlando.
i
Rate This
Marcos says:
octubre 25, 2017 en 4:40 pm
Muy bueno tu aporte, no se si me leas, pues hace mas de un año del ultimo comentario. Tengo una pregunta : me gustaria saber
si hay forma de darle color o inverso o parpadeante a uno de los campos mostrados o bien al hacer una resta de 2 campos
numericos y mostrarlo en color inverso; espero me haya explicado.
i
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salid… 16/17
15/12/2017 Dando formato a la salida de una consulta | Orlando Olguín Olvera
Rate This
Tänel tiene en su sitio un post donde habla de cómo colorizar la salida, sí se puede:
h p://blog.tanelpoder.com/2012/09/19/sqlplus-is-my-second-home-part-6-colorizing-sqlplus-and-terminal-output/
select
chr(27)||'[40m’||chr(27)||'[1;’||to_char(rownum+29)||’mTest’ a
, chr(27)||'[41m’||chr(27)||'[1;’||to_char(rownum+29)||’mTest’ b
, chr(27)||'[42m’||chr(27)||'[1;’||to_char(rownum+29)||’mTest’ c
, chr(27)||'[43m’||chr(27)||'[1;’||to_char(rownum+29)||’mTest’ d
, chr(27)||'[44m’||chr(27)||'[1;’||to_char(rownum+29)||’mTest’ e
, chr(27)||'[45m’||chr(27)||'[1;’||to_char(rownum+29)||’mTest’ f
, chr(27)||'[46m’||chr(27)||'[1;’||to_char(rownum+29)||’mTest’ g
, chr(27)||'[47m’||chr(27)||'[1;’||to_char(rownum+29)||’mTest’ h
from dual
connect by level<=8
union all
select chr(27)||'[0m', null, null, null, null, null, null, null from dual
union all
select
chr(27)||'[32m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' a
, chr(27)||'[33m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' b
, chr(27)||'[34m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' c
, chr(27)||'[35m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' d
, chr(27)||'[36m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' e
, chr(27)||'[37m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' f
, chr(27)||'[38m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' g
, chr(27)||'[39m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' h
from dual
connect by level<=8
union all
select chr(27)||'[0m', null, null, null, null, null, null, null from dual
/
h ps://orlandoolguin.wordpress.com/2010/02/26/scripts-utiles-para-un-dba/
Orlando.
i
Rate This
Blog de WordPress.com.
https://webcache.googleusercontent.com/search?q=cache:60cYdQNGDbsJ:https://orlandoolguin.wordpress.com/2008/08/16/como-dar-formato-a-la-salid… 17/17