歴史的な理由。 10g以前は異なっていました:
8iおよび9iでは、PLS_INTEGERはBINARY_INTEGERよりも著しく高速でした。
整数の宣言と操作に関しては、Oracleは次のような多くのオプションを提供しています。
INTEGER-STANDARDパッケージでNUMBERのサブタイプとして定義されているこのデータ型は、プラットフォームに完全に依存しない方法で実装されます。つまり、NUMBERまたはINTEGER変数で行うことは、データベースがインストールされているハードウェアに関係なく同じように機能する必要があります。 。
BINARY_INTEGER-STANDARDパッケージでINTEGERのサブタイプとして定義されています。 BINARY_INTEGERとして宣言された変数には、-2 + 1 .. 2-1、別名-2,147,483,647から2,147,483,647までの値を割り当てることができます。 Oracle9i Databaseリリース2より前は、BINARY_INTEGERは、次のように、連想配列(別名、index-byテーブル)で許可されている唯一のインデックスデータ型でした。
TYPE my_array_t IS TABLE OF VARCHAR2(100)
INDEX BY BINARY_INTEGER
PLS_INTEGER-標準パッケージでBINARY_INTEGERのサブタイプとして定義されています。 PLS_INTEGERとして宣言された変数には、-2 + 1 .. 2-1、別名-2,147,483,647から2,147,483,647までの値を割り当てることができます。 PLS_INTEGER演算はマシン演算を使用するため、通常、NUMBERおよびINTEGER演算よりも高速です。また、Oracle Database 10gより前は、BINARY_INTEGERよりも高速です。ただし、Oracle Database 10gでは、BINARY_INTEGERとPLS_INTEGERは同一になり、互換的に使用できるようになりました。