Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verhindern des Abschneidens von Spaltennamen durch sqlplus ohne individuelle Spaltenformatierung

Eine Sache, die Sie versuchen können, ist, "column x format a20"-Befehle dynamisch zu generieren. Etwas wie das Folgende:

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

Beachten Sie, dass dieses Beispiel nur mit VARCHAR2 funktioniert. Sie müssten beispielsweise decode hinzufügen, um den generierten "column"-Befehl für DATEs oder NUMBERs zu ändern.

UPDATE:Es stellt sich heraus, dass das ursprüngliche SQL das Verhalten von SQL*Plus nicht wirklich ändert. Das einzige, was mir einfällt, ist, die Feldnamen wie folgt in Ein-Zeichen-Werte A, B, C usw. umzubenennen:

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

Es wird eine Ausgabe ähnlich der folgenden generiert:

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