C'est trop long pour un commentaire.
Vous ne pouvez pas faire ce que vous voulez facilement. Oracle convertit la valeur d'entrée 3.2
à un entier. L'entier respecte la contrainte. La valeur 3
est ce qui est inséré. La conversion se passe dans les coulisses. Les développeurs d'Oracle ont pensé que cette conversion était une "bonne chose".
Vous pouvez contourner ce problème en déclarant la colonne comme un nombre puis en vérifiant qu'il s'agit d'un entier :
create table test (
A number,
constraints ACHECK check(A between 1 and 5 and mod(A, 1) = 0)
);