您可以尝试的一件事是动态生成“column x format a20”命令.类似于以下内容:
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的行为.我唯一能想到的是通过以下方式将字段名称重命名为一个字符值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"