2012-06-14 16 views
13

最近、db2 - > oracle移行プロジェクトで作業していましたが、この状況に遭遇しました。 開発者が誤ってdecimal(s、p)列を使用して新しいテーブル構造を作成していました。私はオラクルがこれをサポートしているのを覚えていませんでしたが、いくつかの掘り下げは、ANSIデータ型がオラクルによってサポートされていることを示しました。小数点(s、p)または数値(s、p)?

はしかし、私のために疑問が残った -

  1. このデータは内部的に処理されますか?
  2. Oracleの組み込み型の代わりにANSI型を使用するコストはありますか?
  3. ターゲット・タイプがOracle組み込みタイプの場合、データ移行中に影響がありますか?

答えて

17

オラクル、they are the sameで:表とクラスタを作成

SQLステートメントは、IBM製品SQL/DSおよびDB2からANSIデータ 型とデータ型を使用することができます。 Oracle は、Oracle データベース・データ型名とは異なるANSIまたはIBMデータ型名を認識します。これは、データ型を同等の Oracleデータ型に変換し、 列データ型の名前としてOracleデータ型を記録し、次の表に示す変換に基づいて列データを Oracleデータ型に格納します。しかしながら

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(*)INTEGERすなわち、NUMBER(*, 0)として扱われることを意味するDECIMAL 0までのスケールのデフォルト:

この引用以下の表は、DECIMAL(p,s)NUMBER(p,s)として内部的に扱われることを示しています。

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 
+0

変換によるパフォーマンスの低下はありますか? – Gyan

+1

データ変換はありません: 'DECIMAL'が格納され、' NUMBER'として扱われます。 –

+3

@ learn4living - Oracleはメタデータ(データ・ディクショナリに格納されているもの)を変換しているデータ(列に格納されている値)を変換していません。したがって、唯一のコストはあなたが今支払っている価格です.Oracle以外のデータ型に直面しているOracleの実務家の間の混乱。 – APC

-2

実際には、10進数と数字の間に違いがあります。 小数点は超過した値を切り捨て、数値はその値を丸めます。

+4

私は確かにこれのデモを見るのが大好きです。 [このフィドル](http://www.sqlfiddle.com/#!4/23fb7/1)は、NUMBERとDECIMALの両方がオーバースケール値を丸めていることを示しているようです。 –

関連する問題