試すことができることの1つは、「columnxformata20」コマンドを動的に生成することです。次のようなもの:
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
このサンプルはVARCHAR2でのみ機能することに注意してください。たとえば、DATEまたはNUMBERに対して生成された「列」コマンドを変更するには、デコードを追加する必要があります。
更新:元のSQLはSQL*Plusの動作を実際には変更しないことが判明しました。私が考えることができる唯一のことは、次の方法でフィールド名を1つの文字値A、B、Cなどに名前変更することです。
select 'column ' || column_name ||
' heading "' ||
chr(ascii('A') - 1 + column_id) ||
'"'
from all_tab_cols
where table_name='YOUR_TAB_NAME'
次のような出力が生成されます:
column DEPT_NO heading "A"
column NAME heading "B"
column SUPERVIS_ID heading "C"
column ADD_DATE heading "D"
column REPORT_TYPE heading "E"