Đây là một bình luận quá dài.
Bạn không thể làm những gì bạn muốn một cách dễ dàng. Oracle đang chuyển đổi giá trị đầu vào 3.2
thành một số nguyên. Số nguyên đáp ứng ràng buộc. Giá trị 3
là những gì được chèn vào. Việc chuyển đổi diễn ra ở hậu trường. Các nhà phát triển của Oracle cho rằng việc chuyển đổi này là một "điều tốt".
Bạn có thể giải quyết vấn đề này bằng cách khai báo cột dưới dạng số và sau đó kiểm tra xem nó có phải là số nguyên không:
create table test (
A number,
constraints ACHECK check(A between 1 and 5 and mod(A, 1) = 0)
);