46

私はオラクル辞書ビューを使用して、2 つのスキーマ間に列の違いがあるかどうかを調べました。データ型の不一致を同期しているときに、all_tab_columns/user_tab_columns/dba_tab_columns に NUMBER と INTEGER の両方のデータ型が NUMBER のみとして格納されていることがわかりました。そのため、あるスキーマ/列に数値データ型があり、別のスキーマ/列に整数データ型があるデータ型の不一致を同期することは困難です。 .

スキーマの比較中に、データ型の不一致が表示されます。ディクショナリ ビューを使用する別の代替フォームがあるかどうか、またはディクショナリ ビューの特定のプロパティを使用してデータ型が整数かどうかを識別できるかどうかを提案してください。

4

3 に答える 3

31

私が見つけた最良の説明はこれです:

INTEGER と NUMBER の違いは何ですか? いつ NUMBER を使用し、いつ INTEGER を使用する必要がありますか? ここでコメントを更新したかっただけです...

NUMBER は入力したとおりに保存されます。スケールは -84 ~ 127 です。ただし、INTEGER は整数に丸められます。INTEGER の位取りは 0 です。INTEGER は NUMBER(38,0) と同等です。つまり、INTEGER は制約付きの数値です。小数点以下は四捨五入されます。ただし、NUMBER は制約されません。

  • 整数(12.2) => 12
  • 整数(12.5) => 13
  • 整数(12.9) => 13
  • 整数(12.4) => 12
  • 数値(12.2) => 12.2
  • 数値(12.5) => 12.5
  • 数値(12.9) => 12.9
  • 数値(12.4) => 12.4

INTEGER は常に NUMBER より遅くなります。整数は制約が追加された数値であるため。制約を適用するには、追加の CPU サイクルが必要です。私は違いを見たことがありませんが、INTEGER 列に数百万のレコードをロードすると違いがあるかもしれません。入力が整数であることを確認する必要がある場合は、INTEGER が最適なオプションです。それ以外の場合は、NUMBER データ型に固執できます。

リンクはこちら

于 2014-05-28T15:51:19.760 に答える
12

これはオラクルのドキュメントから入手したものですが、オラクル 10g リリース 2 用です。

NUMBER 変数を定義する場合、その精度 (p) と位取り (s) を指定して、必要以上に大きくならないようにすることができます。精度は有効桁数です。スケールは正または負にすることができます。正の位取りは、小数点の右側の桁数を示します。負の位取りは、切り上げまたは切り捨てが可能な小数点の左側の桁数を示します。

NUMBERデータ型は、Oracle Database 標準ライブラリでサポートされており、SQL と同じように動作します。テキストまたはINTEGERデータ型が適切でない場合に、ディメンションおよびサロゲートに使用されます。これは通常、計算 (予測や集計など) に使用されない変数に割り当てられ、データベースの丸め動作に一致する必要があるか、高度の精度を必要とする変数に使用されます。NUMBER データ型を変数に割り当てるかどうかを決定するときは、パフォーマンスを最大化するために次の点に注意してください。

  • NUMBER 変数のアナリティック ワークスペースの計算は、他の数値データ型よりも遅くなります。これは、NUMBER 値がハードウェア (速度) ではなくソフトウェア (精度) で計算されるためです。
  • アナリティック・ワークスペースから NUMBER データ型のリレーショナル列にデータをフェッチする場合、アナリティック・ワークスペースでデータがすでに NUMBER データ型になっていると、パフォーマンスが最高になります。これは、変換ステップが必要ないためです。
于 2013-11-13T10:37:46.640 に答える