Przyczyny historyczne. Kiedyś były inne przed 10g:
W 8i i 9i PLS_INTEGER był zauważalnie szybszy niż BINARY_INTEGER.
Jeśli chodzi o deklarowanie i manipulowanie liczbami całkowitymi, Oracle oferuje wiele opcji, w tym:
INTEGER - zdefiniowany w pakiecie STANDARD jako podtyp NUMBER, ten typ danych jest zaimplementowany w sposób całkowicie niezależny od platformy, co oznacza, że wszystko, co robisz ze zmiennymi NUMBER lub INTEGER, powinno działać tak samo, niezależnie od sprzętu, na którym zainstalowana jest baza danych .
BINARY_INTEGER - zdefiniowany w pakiecie STANDARD jako podtyp typu INTEGER. Zmiennym zadeklarowanym jako BINARY_INTEGER można przypisać wartości z zakresu od -2+1 ..2-1, czyli od -2147483647 do 2147483647. Przed Oracle9i Database Release 2, BINARY_INTEGER był jedynym indeksowanym typem danych dozwolonym dla tablic asocjacyjnych (czyli tablic indeksowanych), jak w:
TYPE my_array_t IS TABLE OF VARCHAR2(100)
INDEX BY BINARY_INTEGER
PLS_INTEGER - zdefiniowany w pakiecie STANDARD jako podtyp BINARY_INTEGER. Zmiennym zadeklarowanym jako PLS_INTEGER można przypisać wartości z przedziału od -2+1 ..2-1, czyli od -2147483647 do 2147483647. Operacje PLS_INTEGER wykorzystują arytmetykę maszynową, więc są generalnie szybsze niż operacje NUMBER i INTEGER. Ponadto przed Oracle Database 10g są szybsze niż BINARY_INTEGER. Jednak w Oracle Database 10g BINARY_INTEGER i PLS_INTEGER są teraz identyczne i mogą być używane zamiennie.