最近、db2-> Oracle移行プロジェクトに取り組んでいるときに、この状況に遭遇しました。開発者は、誤ってdecimal(s、p)列を使用して新しいテーブル構造を作成していました。 Oracleがこれをサポートしていることを覚えていませんでしたが、掘り下げてみると、ANSIデータ型がOracleによってサポートされていることがわかりました。
しかし、私には疑問が残りました-
Oracleでは、 同じ :
テーブルとクラスターを作成するSQLステートメントは、ANSIデータ型とIBM製品SQL/DSおよびDB2のデータ型を使用することもできます。 Oracleは、Oracle Databaseデータ型名とは異なるANSIまたはIBMデータ型名を認識します。データ型を同等のOracleデータ型に変換し、Oracleデータ型を列データ型の名前として記録し、次の表に示す変換に基づいてOracleデータ型に列データを格納します。
この引用の下の表は、DECIMAL(p,s)
が内部的にNUMBER(p,s)
として扱われることを示しています。
_SQL> create table t (a decimal(*,5), b number (*, 5));
Table created
SQL> desc t;
Name Type Nullable Default Comments
---- ----------- -------- ------- --------
A NUMBER(*,5) Y
B NUMBER(*,5) Y
_
ただし、スケールはデフォルトでDECIMAL
の0に設定されます。つまり、DECIMAL(*)
はNUMBER(*, 0)
として処理されます。つまり、INTEGER
:
_SQL> create table t (a decimal, b number, c decimal (5), d decimal (5));
Table created
SQL> desc t;
Name Type Nullable Default Comments
---- --------- -------- ------- --------
A INTEGER Y
B NUMBER Y
C NUMBER(5) Y
D NUMBER(5) Y
_