我试图弄清楚为什么在从特定视图中选择时(创建另一个视图或复制视图以创建表时)丢失了列号格式,并且惊讶地发现 DISTINCT 是罪魁祸首。使用最简单的视图来说明问题:
CREATE VIEW Test AS
SELECT DISTINCT CAST(1.5 AS NUMBER(6,3)) AS TestCol from dual;
desc test;
TESTCOL NUMBER(6,3)
create view test2 as
select * from test;
desc test2;
TESTCOL NUMBER
但是,如果我在创建辅助视图时也使用 DISTINCT,则会保留数字格式:
create view test3 as
select DISTINCT * from test;
desc test3;
TESTCOL NUMBER(6,3)
对我来说更大的问题是使用复制命令从此视图生成表时:
copy from bob/bob@localhost/ora create test4 using select * from test;
desc test4;
TESTCOL NUMBER(38)
我的数字精度丢失了:
select * from test4;
TESTCOL
2 -- should be 1.5
但是,如果我还在DISTINCT
复制命令中指定,数字将被正确复制。
问题是为什么DISTINCT
会以这种方式影响数字格式?经过(诚然快速)搜索后,我找不到原因,有人知道吗?