tablas - Cómo formatear la selección de solo texto de Oracle SQL
ver historial de consultas en oracle (6)
Estoy usando Oracle SQL (en SQLDeveloper, por lo que no tengo acceso a comandos SQLPLUS como COLUMN) para ejecutar una consulta que se parece a esto:
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 parecen algo así:
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.517321000 AM 2 rows selected
Esto puede producir fácilmente un informe textual muy amplio y difícil de manejar cuando intento pegar los resultados como un bloque de texto rápido y sucio en un correo electrónico o informe de problema, etc. ¿Cuál es la mejor manera de deshacerse? de todo el espacio en blanco extra en las columnas de salida cuando uso solo Oracle SQL sencillo? 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).
¿Por qué no usar la función "cast"?
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'';
¿Qué estás usando 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.
Por defecto, Oracle genera columnas basadas en el ancho del título o el ancho de la columna de datos que sea más amplio.
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'';
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 utilizables más angostas.
por ejemplo, (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 comando y lo canalices a través de un script awk.
Si no lo entiendo bien, entonces actualice su pregunta y tendré otra oportunidad :)
En su extracto, puede especificar el tipo de resultado que está buscando:
select /*csv*/ col1, col2 from table;
select /*Delimited*/ col1, col2 from table;
hay otros formatos disponibles como xml, html, text, loader, etc.
Puede cambiar el formato de estas opciones particulares en Herramientas> Preferencias> Base de datos> Utilidades> Exportar
Asegúrese de elegir Ejecutar script en lugar de ejecutar Statement.
* esto es para Oracle SQL Developer v3.2
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 el resultado en Excel y formatearlo allí o simplemente adjuntar la hoja de cálculo. Algunas herramientas guardarán el resultado directamente como una hoja de cálculo.
Si no tiene muchas filas devueltas, a menudo usaré la función de impresión de Tom Kytes .
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 hay muchas filas, solo haré la consulta en SQL Developer y las guardaré como xls; los tipos de negocios adoran Excel por alguna razón.