ver tablas restaurar recuperar query developer desde describe datos consultar archivos 11g database oracle sqlplus

database - tablas - Cómo mostrar los datos de la tabla más claramente en Oracle sqlplus



restaurar base de datos oracle 11g (4)

Quiero poder mostrar los datos resultantes de una selección de una manera bonita, no todas las columnas debajo de otras.

Esta es la forma en que sqlplus muestra los datos de mi tabla:

Pero quiero mostrarles como:

Name | Address | Phone | -------+---------------+-------------+ name1 | address1 | phone1 | name2 | address2 | phone2 | name3 | address3 | phone3 |

No cada columna debajo de la otra


En caso de que tenga un volcado hecho con sqlplus y la salida esté distorsionada ya que alguien no estableció esos 3 valores antes, hay una salida.

Hace solo un par de horas, el administrador de DB me envió ese feo resultado de una consulta ejecutada en sqlplus (no lo sé, tal vez me odie ...). Tenía que encontrar una salida: este es un script awk para analizar esa salida para que sea al menos más legible. No es perfecto, pero no tuve tiempo suficiente para pulirlo correctamente. De todos modos, hace el trabajo bastante bien.

awk '' function isDashed(ln){return ln ~ /^---+/};function addLn(){ln2=ln1; ln1=ln0;ln0=$0};function isLoaded(){return l==1||ln2!=""}; function printHeader(){hdr=hnames"/n"hdash;if(hdr!=lastHeader){lastHeader=hdr;print hdr};hnames="";hdash=""};function isHeaderFirstLn(){return isDashed(ln0) && !isDashed(ln1) && !isDashed(ln2) }; function isDataFirstLn(){return isDashed(ln2)&&!isDashed(ln1)&&!isDashed(ln0)} BEGIN{_d=1;h=1;hnames="";hdash="";val="";ln2="";ln1="";ln0="";fheadln=""} { addLn(); if(!isLoaded()){next}; l=1; if(h==1){if(!isDataFirstLn()){if(_d==0){hnames=hnames" "ln1;_d=1;}else{hdash=hdash" "ln1;_d=0}}else{_d=0;h=0;val=ln1;printHeader()}}else{if(!isHeaderFirstLn()){val=val" "ln1}else{print val;val="";_d=1;h=1;hnames=ln1}} }END{if(val!="")print val}''

En caso de que alguien más quiera intentar mejorar este script, a continuación se muestran las variables: hnames - nombres de columna en el encabezado, hdash - guiones debajo del encabezado, h - si actualmente estoy analizando el encabezado (luego == 1), val - los datos, _d - - para intercambiar entre hnames y hdash, ln0 - última línea leída, ln1 - línea leída previamente (es con la que estoy trabajando actualmente), ln2 - lectura de línea antes de ln1

¡Análisis feliz!

Oh, casi lo olvido ... Lo uso para embellecer la salida sqlplus por mi cuenta:

[oracle@ora ~]$ cat prettify_sql set lines 256 set trimout on set tab off set pagesize 100 set colsep " | "

colsep es opcional, pero hace que la salida se vea como sqlite, que es más fácil de analizar usando scripts.

EDITAR: una pequeña vista previa de salida analizada y no analizada


Normalmente comienzo con algo como:

set lines 256 set trimout on set tab off

Eche un vistazo a la help set si tiene la información de ayuda instalada. Y luego select name,address lugar de select * si realmente quiere esas dos columnas.


Puede establecer el tamaño de línea de acuerdo con el ancho de la ventana y configurar el ajuste utilizando el siguiente comando.

set linesize 160; set wrap off;

He usado 160 según mi preferencia, puede establecerlo en algún lugar entre 100 - 200 y la configuración no ajustará sus datos y mostrará los datos correctamente.


Si quieres decir que quieres verlos así:

WORKPLACEID NAME ADDRESS TELEPHONE ----------- ---------- -------------- --------- 1 HSBC Nugegoda Road 43434 2 HNB Bank Colombo Road 223423

luego en SQL Plus puede establecer los anchos de columna como este (por ejemplo):

column name format a10 column address format a20 column telephone format 999999999

También puede especificar el tamaño de línea y el tamaño de página si es necesario así:

set linesize 100 pagesize 50

Para ello, escriba esos comandos en SQL Plus antes de ejecutar la consulta. O puede poner estos comandos y la consulta en un archivo de script, por ejemplo, myscript.sql, y ejecutar eso. Por ejemplo:

column name format a10 column address format a20 column telephone format 999999999 select name, address, telephone from mytable;