Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Evitando o truncamento do sqlplus de nomes de coluna, sem formatação de coluna individual


Uma coisa que você pode tentar é gerar dinamicamente comandos "column x format a20". Algo como o seguinte:
set termout off
set feedback off

spool t1.sql
select 'column ' || column_name || ' format a' || data_length
from all_tab_cols
where table_name='YOUR_TABLE'
/
spool off

@t1.sql
set pagesize 24
set heading on
spool result.txt
select * 
from  YOUR_TABLE;
and   rownum < 30;
spool off

Observe que esta amostra funcionará apenas com VARCHAR2. Você precisaria adicionar decodificação, por exemplo, para alterar o comando "coluna" gerado para DATEs ou NUMBERs.

ATUALIZAÇÃO:Acontece que o SQL original realmente não altera o comportamento do SQL*Plus. A única coisa que consegui pensar é renomear os nomes dos campos para um valor de caractere A, B, C, etc. da seguinte maneira:
select 'column ' || column_name ||
       ' heading "' ||
       chr(ascii('A') - 1 + column_id) ||
       '"'
from all_tab_cols
where table_name='YOUR_TAB_NAME'

Ele irá gerar a saída semelhante a:
column DEPT_NO heading "A"
column NAME heading "B"
column SUPERVIS_ID heading "C"
column ADD_DATE heading "D"
column REPORT_TYPE heading "E"