¿Cómo hacer que la salida sqlplus aparezca en una línea?

47

Tengo una mesa con 100 columnas. Al seleccionar datos en SQL Pluslas envolturas de salida, lo que dificulta la lectura.

Lo que preferiría es que aparezca una barra de desplazamiento horizontal o de alguna manera enviar la salida a less

Ejecuto las siguientes declaraciones en SQLPlus:

SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;

Entonces en bashcorro -

menos output.txt

La salida todavía aparece envuelta e ilegible.

Kshitiz Sharma
fuente
1
También me gustaría que las columnas se expandan automáticamente en lugar de que tenga que establecer el tamaño de columna para cada una individualmente.
Kshitiz Sharma

Respuestas:

58

No es suficiente forzar a sqlplus a no ajustar las líneas. También es necesario decirle al espectador que usa para ver el archivo de spool y no para ajustar las líneas. Si el espectador es lessentonces -Sla opción que usted tiene que usar de acuerdo a https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . En Unix / Linux puede usar head -1 output.txtpara obtener la primera línea de un archivo y, por lo tanto, verificar si esto es como se esperaba o puede usar od -c output.txt|head para ver dónde se colocan realmente los saltos de línea en su archivo de salida.

Si muestra columnas LARGAS y sus valores contienen saltos de línea, se imprimirán varias líneas para estos valores de columna y no puede anular esto con la configuración de sqlplus.


Los siguientes comandos sqlplus pueden ser útiles:

  • SET LINESIZE linesizeLa longitud de la línea. En la mayoría de los casos, el valor máximo linesizees 32767. Puede averiguar su valor máximo si establece LINESIZE en un valor no válido y verifica el mensaje de error, por lo que SET LINESIZE 0puede dar SP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON de lo contrario, cada línea en el spoolfile se llena con espacios en blanco hasta que se alcanza el tamaño de línea.
  • SET TRIMOUT ON de lo contrario, cada línea de la salida se rellena con espacios en blanco hasta que se alcanza el tamaño de línea.
  • SET WRAP OFFTrunca la línea si es más larga que LINESIZE. Esto no debería suceder si el tamaño de línea es lo suficientemente grande.
  • SET TERMOUT OFFsuprime la impresión de los resultados a la salida. Las líneas aún se escriben en el archivo de spool. Esto puede acelerar mucho el tiempo de ejecución de una declaración.
  • SET PAGESIZE 0 para establecer un tamaño de página infinito y evitar encabezados, títulos, etc.
  • Hay otros SETparámetros relacionados con la salida (NUMWIDTH, NUMFORMAT, LONG, COLSEP) y el rendimiento (ARRAYSIZE, LONGCHUNKSIZE).

Debe usar el COLUMNcomando para formatear columnas individuales.

Por ejemplo column name format a30, formateará la columna nameen la salida a una longitud máxima de 30 caracteres.

Si desea que el tamaño de la pantalla no sea fijo, pero debe ser igual al tamaño del valor real de una columna en una fila, entonces la única forma que sé es que cambia la cláusula select de su declaración para obtener el resultado deseado y usar el operador de concatenación de cadenas ||, p. ej.

select emp_id||' '||first_name||' '||last_name
from emp;

Se puede encontrar una descripción completa de todas las variables en la Guía y referencia del usuario de SQL * Plus .

Si desea reutilizar algunas configuraciones (o definiciones de COLUMNA), puede almacenarlas en un archivo y ejecutar este archivo cuando las necesite nuevamente. Incluso puede ejecutar este archivo automáticamente si inicia sqlplus.

(1) "Cómo encontrar el valor máximo de LINESIZE (depende del sistema) (Doc. ID 1547262.1)"

milagro173
fuente
LONGCHUNKSIZEno se trata solo de rendimiento, parece ser necesario para evitar el ajuste de línea indeseable, además de LINESIZEexperimentar esto con resultados inutilizables deDBMS_METADATA.get_ddl()
Daniel Vérité
2
Buena respuesta ...
ypercubeᵀᴹ
2
Lo que dijo @ YperSillyCubeᵀᴹ :)
Tom V
Debería usar en SET PAGESIZE 1000lugar de lo 0contrario, los encabezados de las columnas no se imprimirán al emitir los comandos "SELECT". Referencia .
Pierre C
@PierreC es por eso que escribí "SET PAGESIZE 0 para establecer un tamaño de página infinito y evitar encabezados, títulos, etc."
milagro173
5

Debe configurar lo siguiente:

SET WRAP OFF
Balazs Papp
fuente
3
set linesize 30000 SET WRAP OFFhizo el truco para mí
Ren
2

puedes configurar así

SET WRAP OFF

SET PAGESIZE 0
DevYudh
fuente