Razões históricas. Eles costumavam ser diferentes antes de 10g:
Em 8i e 9i, PLS_INTEGER foi notavelmente mais rápido que BINARY_INTEGER.
Quando se trata de declarar e manipular números inteiros, a Oracle oferece muitas opções, incluindo:
INTEGER - definido no pacote STANDARD como um subtipo de NUMBER, este tipo de dados é implementado de forma completamente independente de plataforma, o que significa que qualquer coisa que você faça com as variáveis NUMBER ou INTEGER deve funcionar da mesma forma independente do hardware no qual o banco de dados está instalado .
BINARY_INTEGER - definido no pacote STANDARD como um subtipo de INTEGER. Variáveis declaradas como BINARY_INTEGER podem receber valores entre -2+1 .. 2-1, também conhecido como -2.147.483.647 a 2.147.483.647. Antes do Oracle9i Database Release 2, BINARY_INTEGER era o único tipo de dados de indexação permitido para arrays associativos (também conhecido como tabelas index-by), como em:
TYPE my_array_t IS TABLE OF VARCHAR2(100)
INDEX BY BINARY_INTEGER
PLS_INTEGER - definido no pacote STANDARD como um subtipo de BINARY_INTEGER. Variáveis declaradas como PLS_INTEGER podem receber valores entre -2+1 .. 2-1, também conhecido como -2.147.483.647 a 2.147.483.647. As operações PLS_INTEGER usam aritmética de máquina, portanto, geralmente são mais rápidas que as operações NUMBER e INTEGER. Além disso, antes do Oracle Database 10g, eles são mais rápidos que BINARY_INTEGER. No Oracle Database 10g, entretanto, BINARY_INTEGER e PLS_INTEGER agora são idênticos e podem ser usados alternadamente.