Ragioni storiche. Prima dei 10 g erano diversi:
Su 8i e 9i, PLS_INTEGER era notevolmente più veloce di BINARY_INTEGER.
Quando si tratta di dichiarare e manipolare numeri interi, Oracle offre molte opzioni, tra cui:
INTEGER - definito nel pacchetto STANDARD come sottotipo di NUMBER, questo tipo di dati è implementato in modo completamente indipendente dalla piattaforma, il che significa che qualsiasi cosa tu faccia con le variabili NUMBER o INTEGER dovrebbe funzionare allo stesso modo indipendentemente dall'hardware su cui è installato il database .
BINARY_INTEGER - definito nel pacchetto STANDARD come sottotipo di INTEGER. Alle variabili dichiarate come BINARY_INTEGER possono essere assegnati valori compresi tra -2+1 .. 2-1, ovvero da -2.147.483.647 a 2.147.483.647. Prima di Oracle9i Database Release 2, BINARY_INTEGER era l'unico tipo di dati di indicizzazione consentito per gli array associativi (ovvero le tabelle index-by), come in:
TYPE my_array_t IS TABLE OF VARCHAR2(100)
INDEX BY BINARY_INTEGER
PLS_INTEGER - definito nel pacchetto STANDARD come sottotipo di BINARY_INTEGER. Alle variabili dichiarate come PLS_INTEGER possono essere assegnati valori compresi tra -2+1 .. 2-1, ovvero da -2.147.483.647 a 2.147.483.647. Le operazioni PLS_INTEGER utilizzano l'aritmetica della macchina, quindi sono generalmente più veloci delle operazioni NUMBER e INTEGER. Inoltre, prima di Oracle Database 10g, sono più veloci di BINARY_INTEGER. In Oracle Database 10g, tuttavia, BINARY_INTEGER e PLS_INTEGER sono ora identici e possono essere utilizzati in modo intercambiabile.