Historische redenen. Vroeger waren ze anders voor 10g:
Op 8i en 9i was PLS_INTEGER merkbaar sneller dan BINARY_INTEGER.
Als het gaat om het declareren en manipuleren van gehele getallen, biedt Oracle veel opties, waaronder:
INTEGER - gedefinieerd in het STANDARD-pakket als een subtype van NUMBER, dit datatype wordt volledig platformonafhankelijk geïmplementeerd, wat betekent dat alles wat u doet met NUMBER- of INTEGER-variabelen hetzelfde zou moeten werken, ongeacht de hardware waarop de database is geïnstalleerd .
BINARY_INTEGER - gedefinieerd in het STANDARD-pakket als een subtype van INTEGER. Variabelen gedeclareerd als BINARY_INTEGER kunnen waarden worden toegekend tussen -2+1 .. 2-1, oftewel -2.147.483.647 tot 2.147.483.647. Vóór Oracle9i Database Release 2 was BINARY_INTEGER het enige indexeringsgegevenstype dat was toegestaan voor associatieve arrays (ook wel index-by-tabellen genoemd), zoals in:
TYPE my_array_t IS TABLE OF VARCHAR2(100)
INDEX BY BINARY_INTEGER
PLS_INTEGER - gedefinieerd in het STANDARD-pakket als een subtype van BINARY_INTEGER. Variabelen gedeclareerd als PLS_INTEGER kunnen waarden worden toegekend tussen -2+1 .. 2-1, oftewel -2.147.483.647 tot 2.147.483.647. PLS_INTEGER-bewerkingen maken gebruik van machineberekeningen, dus ze zijn over het algemeen sneller dan NUMBER- en INTEGER-bewerkingen. Bovendien zijn ze vóór Oracle Database 10g sneller dan BINARY_INTEGER. In Oracle Database 10g zijn BINARY_INTEGER en PLS_INTEGER nu echter identiek en kunnen ze door elkaar worden gebruikt.