Det här är för långt för en kommentar.
Du kan inte göra vad du vill lätt. Oracle konverterar ingångsvärdet 3.2
till ett heltal. Heltalet uppfyller begränsningen. Värdet 3
är det som sätts in. Omvandlingen sker bakom kulisserna. Utvecklarna av Oracle ansåg att denna omvandling är en "bra sak".
Du kan komma runt detta genom att deklarera kolumnen som ett nummer och kontrollera sedan att det är ett heltal:
create table test (
A number,
constraints ACHECK check(A between 1 and 5 and mod(A, 1) = 0)
);