Pergunta

Eu estou usando o Oracle SQL (em SQLDeveloper, então eu não tenho acesso a SQLPLUS comandos como COLUNA) para executar uma consulta que é algo como isto:

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

Os resultados que me dão algo parecido com isto:

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

Este pode muito facilmente produzir um relatório textual muito grande e pesado quando eu estou tentando colar os resultados como um n-quick-suja bloco de texto agradavelmente formatada em um relatório de e-mail ou problema, etc. Qual é a melhor maneira para se livrar de todo o espaço em branco extra tha nas colunas de saída quando eu estou usando apenas plain vanilla Oracle SQL? Até agora todas as minhas pesquisas na web não apareceu muito, como todos os resultados de pesquisa na web estão me mostrando como fazê-lo usando comandos de formatação como COLUMN em SQLPLUS (que eu não tenho).

Foi útil?

Solução

O que você está usando para obter os resultados? A saída colado parece que está vindo do SQL * PLUS. Pode ser que qualquer ferramenta que você está usando para gerar os resultados tem algum método de modificar a saída.

Por colunas padrão do Oracle saídas com base na largura do título ou a largura dos dados da coluna que for maior.

Se você quer fazer colunas menor você terá que quer renomeá-los ou convertê-los em texto e uso substr () para fazer os padrões menores.

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';

Outras dicas

Na sua declaração, você pode especificar o tipo de saída que você está procurando:

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

existem outros formatos disponíveis, tais como XML, HTML, texto, carregador, etc.

Você pode alterar a formatação dessas opções particulares em Ferramentas> Preferências> Banco de Dados> Utilitários> Exportar

Certifique-se de escolher Run Script em vez de Executar instrução.

* isto é para Oracle SQL Developer v3.2

O que você pode fazer com sql é limitado pela sua ferramenta. SQL Plus possui comandos para formatar as colunas, mas eles não são reais fácil de usar.

Uma abordagem rápida é colar a saída em excel e formatá-lo lá ou apenas anexar a planilha. Algumas ferramentas irá salvar a saída diretamente como uma planilha.

questão Nice. Eu realmente tive que pensar sobre isso.

Uma coisa que você pode fazer é mudar o seu SQL para que ele só retorna as mais estreitas colunas utilizáveis.

por exemplo. (Eu não sou muito quente na sintaxe oráculo, mas algo semelhante deve 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';

Isso faz sentido?
Se você estivesse fazendo isso em unix / linux, gostaria de sugerir executá-lo a partir da linha de comando e canalizando-o através de um script awk.

Se eu entendi-miss, em seguida, atualize a sua pergunta e eu vou ter outra chance:)

Se você não tem um monte de linhas retornadas com freqüência eu vou usar Tom Kytes função 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> 

Se seus lotes de linhas, eu vou apenas fazer a consulta no SQL Developer e salvar como xls, tipos businessy amo excel por algum motivo.

Por que não usar a função "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';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top