Cómo Formatear los Resultados de una Consulta en Oracle SQLcl con SET SQLFORMAT

En esta entrada vamos a explorar cómo utilizar el comando SET SQLFORMAT de Oracle SQLcl (SQL Command Line) para modificar la salida de nuestras consultas SQL. Esta funcionalidad es especialmente útil para exportar datos o integrarlos en otros procesos de forma sencilla, sin necesidad de herramientas adicionales.

Requisitos Previos

Antes de empezar, vamos a crear una tabla de ejemplo (EMP) y poblarla con datos. Esta tabla será usada en todos los ejemplos siguientes.

¿Qué es SET SQLFORMAT?

El comando SET SQLFORMAT permite cambiar el formato en que se presentan los resultados de una consulta. SQLcl soporta múltiples formatos como:

  • DEFAULT
  • CSV
  • HTML
  • XML
  • JSON
  • ANSICONSOLE
  • INSERT
  • LOADER
  • FIXED
  • DELIMITED

Vamos a ver cada uno de ellos con ejemplos usando la tabla EMP.

DEFAULT

La opción DEFAULT borra todas las configuraciones SQLFORMAT anteriores y regresa a la salida predeterminada.

SQL> SET SQLFORMAT DEFAULT
SQL Format Cleared
SQL> SELECT * FROM emp WHERE deptno = 20;
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
SQL>

CSV

El formato CSV genera una salida estándar de variables separadas por comas, con valores de cadena entre comillas dobles. La primera línea contiene los nombres de las columnas.

SQL> SET SQLFORMAT CSV
SQL> SELECT * FROM emp WHERE deptno = 20;
"EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO"
7369,"SMITH","CLERK",7902,17-DEC-80,800,,20
7566,"JONES","MANAGER",7839,02-APR-81,2975,,20
SQL>

HTML

El formato HTML genera el HTML para una tabla adaptable. El contenido de la tabla se modifica dinámicamente para coincidir con la cadena de búsqueda introducida en el campo de texto superior izquierdo.

SQL> SET SQLFORMAT HTML
SQL> SELECT * FROM emp WHERE deptno = 20;

La salida de esta consulta es bastante grande.

XML

El formato XML genera un documento XML basado en etiquetas. Todos los datos se presentan como etiquetas CDATA. Este sería un ejemplo acortado de la misma:

SQL> SET SQLFORMAT XML
SQL> SELECT * FROM emp WHERE deptno = 20;
<?xml version='1.0'  encoding='UTF8' ?>
<RESULTS>
        <ROW>
                <COLUMN NAME="EMPNO"><![CDATA[7369]]></COLUMN>
                <COLUMN NAME="ENAME"><![CDATA[SMITH]]></COLUMN>
                <COLUMN NAME="JOB"><![CDATA[CLERK]]></COLUMN>
                <COLUMN NAME="MGR"><![CDATA[7902]]></COLUMN>
                <COLUMN NAME="HIREDATE"><![CDATA[17-DEC-80]]></COLUMN>
                <COLUMN NAME="SAL"><![CDATA[800]]></COLUMN>
                <COLUMN NAME="COMM"><![CDATA[]]></COLUMN>
                <COLUMN NAME="DEPTNO"><![CDATA[20]]></COLUMN>
        </ROW>
</RESULTS>
SET SQLFORMAT

JSON

El formato JSON genera un documento JSON que contiene las definiciones de las columnas junto con sus datos. La salida se minimiza, por lo que es compacta, pero difícil de leer. El formato JSON-FORMATTED imprime el JSON de forma legible.

SQL> SET SQLFORMAT JSON-FORMATTED
SQL> SELECT * FROM emp WHERE deptno = 20;

El resultado será similar a este indicando las columnas y tipo previamente. Se ha acortado la salida por su longitud:

"items" : [
        {
          "empno" : 7369,
          "ename" : "SMITH",
          "job" : "CLERK",
          "mgr" : 7902,
          "hiredate" : "17-DEC-80",
          "sal" : 800,
          "comm" : "",
          "deptno" : 20
        },

ANSICONSOLE

El formato ANSICONSOLE ajusta el tamaño de las columnas al ancho de los datos para ahorrar espacio. Además, subraya las columnas, en lugar de usar una línea de salida aparte. Los subrayados no se copian al texto plano, así que los he añadido manualmente para mostrarles cómo se ven en una pantalla de terminal.

SQL> SET SQLFORMAT ANSICONSOLE
SQL> SELECT * FROM emp WHERE deptno = 20;
  EMPNO ENAME   JOB          MGR HIREDATE       SAL   COMM   DEPTNO
   7369 SMITH   CLERK       7902 17-DEC-80      800              20
   7566 JONES   MANAGER     7839 02-APR-81     2975              20
SQL>

INSERT

El formato INSERT produce las instrucciones INSERT que podrían usarse para recrear las filas de una tabla.

SQL> SET SQLFORMAT INSERT

SQL> SELECT * FROM emp WHERE deptno = 20;
REM INSERTING into EMP
SET DEFINE OFF;
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7369,'SMITH','CLERK',7902,to_timestamp('17-DEC-80','DD-MON-RR HH24.MI.SSXFF'),800,null,20);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7566,'JONES','MANAGER',7839,to_timestamp('02-APR-81','DD-MON-RR HH24.MI.SSXFF'),2975,null,20);
SQL>

LOADER

El formato LOADER genera una salida delimitada por barras verticales con valores de cadena entre comillas dobles. Los nombres de columna no se incluyen en la salida.

SQL> SET SQLFORMAT LOADER
SQL> SELECT * FROM emp WHERE deptno = 20;
 7369|"SMITH"|"CLERK"|7902|"1980-12-17 00:00:00"|800||20|
 7566|"JONES"|"MANAGER"|7839|"1981-04-02 00:00:00"|2975||20|
SQL>

FIXED

El formato FIJO genera columnas de ancho fijo con todos los datos entre comillas dobles. La primera línea contiene los nombres de las columnas.

SQL> SET SQLFORMAT FIXED
SQL> SELECT * FROM emp WHERE deptno = 20;
"EMPNO"                       "ENAME"                       "JOB"                         "MGR"                         "HIREDATE"                    "SAL"                         "COMM"                        "DEPTNO"
"7369"                        "SMITH"                       "CLERK"                       "7902"                        "17-DEC-80"                   "800"                         ""                            "20"
"7566"                        "JONES"                       "MANAGER"                     "7839"                        "02-APR-81"                   "2975"                        ""                            "20"
SQL>

DELIMITED

El formato DELIMITED es un caso especial que permite definir manualmente la cadena delimitadora, así como los caracteres que se utilizarán para encerrar los valores de la cadena. El formato básico es el siguiente:

SET SQLFORMAT DELIMITED <delimiter> <left enclosure> <right enclosure>

En el siguiente ejemplo, la cadena delimitadora es ~del~ y los valores de la cadena están entre comillas dobles.

SQL> SET SQLFORMAT DELIMITED ~del~ " "
SQL> SELECT * FROM emp WHERE deptno = 20;
"EMPNO"~del~"ENAME"~del~"JOB"~del~"MGR"~del~"HIREDATE"~del~"SAL"~del~"COMM"~del~"DEPTNO"
7369~del~"SMITH"~del~"CLERK"~del~7902~del~17-DEC-80~del~800~del~~del~20
7566~del~"JONES"~del~"MANAGER"~del~7839~del~02-APR-81~del~2975~del~~del~20
SQL>

Conclusión

El comando SET SQLFORMAT de SQLcl es una herramienta extremadamente útil cuando necesitamos visualizar, exportar o transformar datos rápidamente en distintos formatos. Ya sea para depuración, documentación, migraciones o integración con otras herramientas, puedes adaptar la salida de tus consultas sin cambiar tu código. Somos expertos en bases de datos Oracle, SQL Server, entre otras. Contáctanos sin compromiso si podemos ayudarte.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *