web-dev-qa-db-ja.com

SQLServer整数のOracleデータ型へのマッピング

SQL Serverの整数はNUMBER(10)で最もよく表されることを私は知っています。

しかし、メンテナンススクリプトをOracleに移行することがあり、整数をNUMBER(10)に注意深くマップする必要があるのか​​、それともOracleでansi型整数を使用できるのか疑問に思います。

整数を使わない理由はありますか?

編集:

10gに対して検証しました。

create table BK_int_test(
i_col integer,
f_col float);

insert into BK_int_test values (1, 1);
insert into BK_int_test values (1.1, 1.1);

Select * from BK_int_test;

     I_COL      F_COL
---------- ----------
         1          1
         1        1,1

2 rows selected.

多くの作業を節約できるおかげで。

intの短縮形integerもサポートされています。

3
bernd_k

Oracleでintegerを使用しない理由はわかりません。適切なOracleデータ型にマップされますが、DDLは少なくともある程度移植可能です。

また、とにかく同等であるため、VARCHAR2ではなくVARCHARを常に使用します。オラクルはこれを推奨していません。将来これが変更される可能性があるためですが、これはバージョン6以降も当てはまります。したがって、実際に変更されるとは思えません;)

integerを使用しない理由として私が考えることができるのは、次の2つだけです。

  1. ある時点で、これらのフィールドからOracleからSQL Serverに整数データを移植する予定の場合: -2,147,483,648〜2,147,483,647 の範囲外の整数がOracle側に挿入されている場合、これらの値は帰りの旅
  2. アプリケーションの一部が前述の範囲内の整数に依存している場合。したがって、この範囲外の値はエラーを引き起こす可能性があります

これらの潜在的な問題はいずれも、 -9,999,999,999〜9,999,999,999 の範囲の整数を許可するnumber(10)を使用しても解決されません。整数を同じ範囲に制限する必要がある場合は、check constraintを使用することをお勧めします。例:

alter table my_table add check (val between -2147483648 and 2147483647);