Това е твърде дълго за коментар.
Не можете лесно да правите това, което искате. Oracle преобразува входната стойност 3.2
до цяло число. Цялото число отговаря на ограничението. Стойността 3
е това, което се вмъква. Преобразуването се случва зад кулисите. Разработчиците на Oracle смятат, че това преобразуване е „добро нещо“.
Можете да заобиколите това, като декларирате колоната като число и след това проверка дали е цяло число:
create table test (
A number,
constraints ACHECK check(A between 1 and 5 and mod(A, 1) = 0)
);