我对Oracle比较陌生,似乎做了些蠢事。我试图添加一个约束,如果我的值TestLengthHours大于6,尝试插入新行应该会导致错误。
我有一些困难向Google解释这是什么,并希望你好人可以帮我告诉我这个愚蠢的错误。
我几乎可以肯定这与舍入有关。如果我使TestLengthHours 6.5或更高版本,插入失败,因为它是预期的。如果TestLengthHours小于6.5,则不会。
在我的例子中,我改变了表TESTTABLE来添加约束。我确保TestLengthHours< = 6.0且TestLengthHours不为空。
然后我尝试插入一个应该失败的值,因为它的TestLengthHours值为6.1,大于6,因此应该违反约束。不幸的是,我做错了什么,行正在成功创建。
-- Constraint for TESTTABLE to make sure TestLengthHours is less than or equal to 6
ALTER TABLE TESTTABLE ADD CONSTRAINT valueTuest
CHECK (TestLengthHours <= 6.0
AND TestLengthHours IS NOT NULL);
-- The following insert should fail, but does not, even though 6.1 is more than or equal to 6.0
INSERT INTO TESTTABLE (ID, TestNumber, TestName, TestDescription, TestLengthHours, TestStatus)
VALUES (16, 'SES-2216', 'Cool Name', 'Cool Description', 6.1, 'B');
-- The following /does/ fail. If TestLengthHours is 6.5 or higher, it fails as it should.
INSERT INTO TESTTABLE (ID, TestNumber, TestName, TestDescription, TestLengthHours, TestStatus)
VALUES (17, 'SES-2218', 'Cool Name', 'Cool Description', 6.5, 'B');
现在,我可以将TestLengthHours四舍五入到最接近的整数,但我认为这不是解决这个问题的正确方法。
我尝试过的另一件事就是像Java一样做了CHECK(TestLengthHours&lt; = 6.0D),但是我也尝试了这个尝试。
TestLengthHours的数据类型是TestLengthHours NUMBER(4)
答案 0 :(得分:0)
如果要为TESTTABLE
列创建TestLengthHours number not null
TestLengthHours
,则添加CHECK (TestLengthHours <= 6 )
约束就足够了。因为&#39; 6.1&#39;或者&#39; 6.5&#39;是字符串值,而6.1和6.5是数字
在您的情况下,似乎数据类型为integer
,并且四舍五入(将使用number
数据类型而不是integer
)。