Sql Oracle 10g上某个数字的精度信息丢失

Sql Oracle 10g上某个数字的精度信息丢失,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,考虑以下简化示例: create view viewa as select cast(1 as decimal(3)) as testa from dual; create view viewb as with sorted as (select testa from viewa order by testa) select testa from sorted; desc viewb; 在Oracle 11g上,此示例按预期打印以下内容: Name Null Type -

考虑以下简化示例:

create view viewa as select cast(1 as decimal(3)) as testa from dual;
create view viewb as
  with sorted as (select testa from viewa order by testa)
  select testa from sorted;
desc viewb;
在Oracle 11g上,此示例按预期打印以下内容:

Name  Null Type      
----- ---- --------- 
TESTA      NUMBER(3) 
但在Oracle 10g上,打印了以下内容:

Name  Null Type   
----- ---- ------ 
TESTA      NUMBER
我很困惑——为什么?这是一个bug还是有什么解释?如果删除任何内容,orderby、公共表表达式、其他视图,结果将正确显示为
NUMBER(3)
。当然,我可以将结果重铸为正确的类型,但我更愿意依靠数据库来携带正确的类型

10g数据库的确切版本是Oracle database 10g Enterprise Edition 10.2.0.4.0版。还复制了Oracle Database 10g Express Edition 10.2.0.1.0版


编辑:编辑示例以根据第一条注释使用
select testa

虽然方便,但
select*
对于生产代码来说是不好的。如果您将其更改为
SELECT testa
,会有什么不同吗?没有
SELECT*
可以与
SELECT testa
自由交换,反之亦然,在CTE和最后一次SELECT中。我清楚地记得,大约12年前,随着Oracle 9i的升级,这种情况发生了怎样的变化,但是改变背后的原因已经从我的记忆中消失了。啊哈,好吧。很高兴知道我不是唯一一个有这个问题的人。谢谢你的信息。