コメントするには長すぎます。
やりたいことは簡単にはできません。 Oracleは入力値3.2
を変換しています 整数に。整数は制約を満たしています。値3
挿入されるものです。変換は舞台裏で行われます。 Oracleの開発者は、この変換は「良いこと」であると考えました。
列を数値として宣言することで、これを回避できます。 次に、それが整数であることを確認します:
create table test (
A number,
constraints ACHECK check(A between 1 and 5 and mod(A, 1) = 0)
);