特定のビューから選択するとき (別のビューを作成するとき、またはビューをコピーしてテーブルを作成するとき) に列番号の形式が失われた理由を理解しようとしていたところ、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
しかし、copy コマンドでも指定するDISTINCT
と、番号は適切にコピーされます。
問題は、なぜ がDISTINCT
このように数値形式に影響を与えるのかということです。(確かに簡単な)検索の後、この理由を見つけることができませんでした。誰か知っていますか?