È troppo lungo per un commento.
Non puoi fare quello che vuoi facilmente. Oracle sta convertendo il valore di input 3.2
a un numero intero. L'intero soddisfa il vincolo. Il valore 3
è ciò che viene inserito. La conversione avviene dietro le quinte. Gli sviluppatori di Oracle hanno ritenuto che questa conversione sia una "cosa buona".
Puoi aggirare il problema dichiarando la colonna come numero e poi verificando che sia un numero intero:
create table test (
A number,
constraints ACHECK check(A between 1 and 5 and mod(A, 1) = 0)
);