Oracle
 sql >> Base de données >  >> RDS >> Oracle

Empêcher la troncature sqlplus des noms de colonne, sans formatage de colonne individuelle

Une chose que vous pouvez essayer est de générer dynamiquement des commandes "column x format a20". Quelque chose comme ce qui suit :

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

Notez que cet exemple ne fonctionnera qu'avec VARCHAR2. Vous auriez besoin d'ajouter un décodage par exemple pour modifier la commande "colonne" générée pour les DATE ou les NUMBER.

MISE À JOUR :Il s'avère que le SQL d'origine ne change pas vraiment le comportement du SQL*Plus. La seule chose à laquelle je pouvais penser est de renommer les noms de champs à un seul caractère valeurs A, B, C, etc. de la manière suivante :

select 'column ' || column_name ||
       ' heading "' ||
       chr(ascii('A') - 1 + column_id) ||
       '"'
from all_tab_cols
where table_name='YOUR_TAB_NAME'

Il générera une sortie similaire à :

column DEPT_NO heading "A"
column NAME heading "B"
column SUPERVIS_ID heading "C"
column ADD_DATE heading "D"
column REPORT_TYPE heading "E"