Esto es demasiado largo para un comentario.
No puedes hacer lo que quieres fácilmente. Oracle está convirtiendo el valor de entrada 3.2
a un entero. El entero cumple la restricción. El valor 3
es lo que se inserta. La conversión ocurre detrás de escena. Los desarrolladores de Oracle pensaron que esta conversión es "algo bueno".
Puede evitar esto declarando la columna como un número y luego comprobando que es un número entero:
create table test (
A number,
constraints ACHECK check(A between 1 and 5 and mod(A, 1) = 0)
);