2008-09-27 14 views
5

Estoy utilizando Oracle SQL (en SQLDeveloper, así que no tienen acceso a SQLPLUS comandos como columna) para ejecutar una consulta que se ve algo como esto:Cómo dar formato a Oracle SQL de sólo texto seleccionar la salida de

select assigner_staff_id as staff_id, active_flag, assign_date, 
    complete_date, mod_date 
from work where assigner_staff_id = '2096'; 

los resultados que me da ser algo como esto:

 
STAFF_ID    ACTIVE_FLAG ASSIGN_DATE    COMPLETE_DATE    MOD_DATE     
---------------------- ----------- ------------------------- ------------------------- ------------------------- 
2096     F   25-SEP-08     27-SEP-08     27-SEP-08 02.27.30.642959000 PM 
2096     F   25-SEP-08     25-SEP-08     25-SEP-08 01.41.02.00 AM 

2 rows selected 

esto puede producir fácilmente una muy amplia y difícil de manejar informe textual cuando estoy tratando de pegar los resultados como un buen formato rápido-n-sucia bloque de texto en un e-mail o informe de problema, etc. ¿Cuál es la mejor manera de deshacerse de todos los ex tra espacio en blanco en las columnas de salida cuando estoy usando solo Oracle SQL simple? Hasta el momento, todas mis búsquedas web no han aparecido demasiado, ya que todos los resultados de búsqueda web me muestran cómo hacerlo usando comandos de formato como COLUMN en SQLPLUS (que no tengo).

Respuesta

2

¿Qué estás utilizando para obtener los resultados? El resultado que pegó parece que proviene de SQL * PLUS. Puede ser que cualquier herramienta que esté utilizando para generar los resultados tenga algún método para modificar la salida.

De forma predeterminada, las columnas de salida de Oracle se basan en el ancho del título o el ancho de los datos de la columna que sea más ancho.

Si desea que las columnas sean más pequeñas, necesitará cambiarles el nombre o convertirlas a texto y usar substr() para reducir los valores predeterminados.

select substr(assigner_staff_id, 8) as staff_id, 
     active_flag as Flag, 
     to_char(assign_date, 'DD/MM/YY'), 
     to_char(complete_date, 'DD/MM/YY'), 
     mod_date 
from work where assigner_staff_id = '2096'; 
+0

Como he mencionado, estoy usando Oracle SQLDeveloper (herramienta gratuita - ¡soy barato!). Puede usar SQL * PLUS bajo las cubiertas, pero no me permite usar el comando COLUMN o la mayoría de los demás comandos SQL * PLUS. Sin embargo, el uso de substr (col, width) es lo que buscaba, ¡eso ayuda! ¡Estupendo! –

0

Buena pregunta. Realmente tenía que pensar sobre eso.

Una cosa que podría hacer es cambiar su SQL para que solo devuelva las columnas más pequeñas utilizables.

p. Ej. (No estoy muy entusiasmado con la sintaxis de Oracle, pero algo similar debería funcionar):

select substring(convert(varchar(4), assigner_staff_id), 1, 4) as id, 
     active_flag as act, -- use shorter column name 

     -- etc. 

from work where assigner_staff_id = '2096'; 

¿Tiene sentido?
Si estuvieras haciendo esto en Unix/Linux, te sugiero que lo ejecutes desde la línea de comandos y lo canalices a través de un script awk.

si he miss-entendida, a continuación, por favor, actualice su pregunta y voy a tener otra oportunidad :)

+0

Intenté pegar una parte de tu respuesta en SQLDeveloper, pero Oracle parece ahogarse con la conversión. Creo que la conversión de Oracle funciona de manera diferente. El uso de subcadena (substr) es útil, sin embargo. –

1

Lo que puede hacer con SQL está limitado por su herramienta. SQL Plus tiene comandos para formatear las columnas, pero no son realmente fáciles de usar.

Un enfoque rápido es pegar la salida en Excel y formatearla allí o simplemente adjuntar la hoja de cálculo. Algunas herramientas guardarán el resultado directamente como una hoja de cálculo.

+1

Ok, esa es una opción decente. Acabo de comprobar y SQL Developer tiene una opción para exportar resultados como un archivo CVS o XLS. –

0

Si no tiene muchas filas devueltas, a menudo utilizo la función Tom Kytes print_table.

SQL> set serveroutput on 
SQL> execute print_table('select * from all_objects where rownum < 3'); 
OWNER       : SYS 
OBJECT_NAME     : /1005bd30_LnkdConstant 
SUBOBJECT_NAME    : 
OBJECT_ID      : 27574 
DATA_OBJECT_ID    : 
OBJECT_TYPE     : JAVA CLASS 
CREATED      : 22-may-2008 11:41:13 
LAST_DDL_TIME     : 22-may-2008 11:41:13 
TIMESTAMP      : 2008-05-22:11:41:13 
STATUS      : VALID 
TEMPORARY      : N 
GENERATED      : N 
SECONDARY      : N 
----------------- 
OWNER       : SYS 
OBJECT_NAME     : /10076b23_OraCustomDatumClosur 
SUBOBJECT_NAME    : 
OBJECT_ID      : 22390 
DATA_OBJECT_ID    : 
OBJECT_TYPE     : JAVA CLASS 
CREATED      : 22-may-2008 11:38:34 
LAST_DDL_TIME     : 22-may-2008 11:38:34 
TIMESTAMP      : 2008-05-22:11:38:34 
STATUS      : VALID 
TEMPORARY      : N 
GENERATED      : N 
SECONDARY      : N 
----------------- 

PL/SQL procedure successfully completed. 

SQL> 

Si sus porciones de filas, sólo voy a hacer la consulta en SQL Developer y guarde como xls, tipos businessy encanta sobresalir por alguna razón.

2

En su estado de cuenta, puede especificar el tipo de salida que está buscando:

select /*csv*/ col1, col2 from table; 
select /*Delimited*/ col1, col2 from table; 

existen otros formatos disponibles, tales como XML, HTML, texto, cargador, etc.

Puede cambiar el formato de estas opciones particulares bajo las herramientas> preferencias> Base de datos> Utilidades> Exportar

Asegúrese de elegir Ejecutar secuencia de comandos en lugar de instrucción de ejecutar.

* esto es para Oracle SQL Developer v3.2

0

Por qué no utilizar la función de "fundido"?

select 
(cast(assigner_staff_id as VARCHAR2(4)) AS STAFF_ID, 
(cast(active_flag as VARCHAR2(1))) AS A, 
(cast(assign_date as VARCHAR2(10))) AS ASSIGN_DATE, 
(cast(COMPLETE_date as VARCHAR2(10))) AS COMPLETE_DATE, 
(cast(mod_date as VARCHAR2(10))) AS MOD_DATE 
from work where assigner_staff_id = '2096'; 
Cuestiones relacionadas