Oracle
 sql >> Database >  >> RDS >> Oracle

Impedire il troncamento sqlplus dei nomi delle colonne, senza formattazione delle singole colonne

Una cosa che puoi provare è generare dinamicamente i comandi "column x format a20". Qualcosa come il seguente:

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

Si noti che questo esempio funzionerà solo con VARCHAR2. Dovresti aggiungere la decodifica, ad esempio, per modificare il comando "colonna" generato per DATE o NUMBER.

AGGIORNAMENTO:risulta che l'SQL originale non cambia realmente il comportamento di SQL*Plus. L'unica cosa che mi viene in mente è rinominare i nomi dei campi con valori di un carattere A, B, C, ecc. nel modo seguente:

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

Genererà l'output simile 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"