Historiska skäl. De brukade vara olika före 10g:
På 8i och 9i var PLS_INTEGER märkbart snabbare än BINARY_INTEGER.
När det gäller att deklarera och manipulera heltal erbjuder Oracle många alternativ, inklusive:
INTEGER - definieras i STANDARD-paketet som en undertyp av NUMBER, denna datatyp är implementerad på ett helt plattformsoberoende sätt, vilket innebär att allt du gör med NUMBER eller INTEGER-variabler ska fungera likadant oavsett hårdvaran som databasen är installerad på .
BINARY_INTEGER - definieras i STANDARD-paketet som en undertyp av INTEGER. Variabler som deklareras som BINARY_INTEGER kan tilldelas värden mellan -2+1 .. 2-1, aka -2,147,483,647 till 2,147,483,647. Före Oracle9i Database Release 2 var BINARY_INTEGER den enda indexeringsdatatypen som tillåts för associativa arrayer (aka, index-by-tabeller), som i:
TYPE my_array_t IS TABLE OF VARCHAR2(100)
INDEX BY BINARY_INTEGER
PLS_INTEGER - definieras i STANDARD-paketet som en undertyp av BINARY_INTEGER. Variabler som deklareras som PLS_INTEGER kan tilldelas värden mellan -2+1 .. 2-1, aka -2,147,483,647 till 2,147,483,647. PLS_INTEGER-operationer använder maskinaritmetik, så de är i allmänhet snabbare än NUMBER och INTEGER-operationer. Före Oracle Database 10g är de dessutom snabbare än BINARY_INTEGER. I Oracle Database 10g är dock BINARY_INTEGER och PLS_INTEGER nu identiska och kan användas omväxlande.