我尝试以spool
输出一个很好的方式,所以我将所有VARCHAR2列格式化为a5。
但是,我有问题的列是:SLOTNUM
类型为NUMBER(2),FEEADJUSTMENT
类型为NUMBER(5,2)。
我的代码是:
column SLOTNUM format 999;
column FEEADJUSTMENT format 999.9;
.........
column [other VARCHAR2] format a5;
select * from allTables;
结果是:
SLOTNUM DATEV ACTUA NOTES FEEADJUSTMENT TREAT NAME
------- ----- ----- ----- ------------- ----- -----
12 19-JU 19-ju Treat 2.5 12345 Flu
N-13 n-13 ment 6 Shot
00:00 succe
:00 ssful
l
15 20-JU 20-ju Appar 5.5 12345 Flu
N-13 n-13 atus 6 Shot
02:00 broke
:00
FEEADJUSTMENT
占用的空间超出了需要。为什么format 999.9
不截断FEEADJUSTMENT
列?
答案 0 :(得分:1)
格式化:
column SLOTNUM format a3;
column FEEADJUSTMENT format a5;
答案 1 :(得分:1)
因为它使用了列标题的长度,as the documentation说:
NUMBER列的宽度等于标题或宽度的宽度 FORMAT加上一个符号空格,以较大者为准。
您可以使用较短的名称为列添加别名:
select slotnum as slotn, ...
您也可以将其视为字符串,但您仍然需要别名:
select to_char(slotnum, 'FM9999') as slotn, ...
如果您愿意,可以将别名设为slotnum
,并使用format a5
,但我认为不太清楚。
我不确定我是否会强迫a5
将所有内容强制为“不错”,特别是因为您的值比强制列包装的值大。我想是一个品味问题......