web-dev-qa-db-ja.com

decimal(s、p)またはnumber(s、p)?

最近、db2-> Oracle移行プロジェクトに取り組んでいるときに、この状況に遭遇しました。開発者は、誤ってdecimal(s、p)列を使用して新しいテーブル構造を作成していました。 Oracleがこれをサポートしていることを覚えていませんでしたが、掘り下げてみると、ANSIデータ型がOracleによってサポートされていることがわかりました。

しかし、私には疑問が残りました-

  1. このデータは内部でどのように処理されますか?
  2. oracleの組み込み型の代わりにANSI型を使用するコストはありますか?
  3. ターゲットタイプがOracleビルトインタイプであった場合、データ移行中に影響がありますか?
17
Gyan

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   
_
18
Vincent Malgrat