【发布时间】:2014-12-14 11:49:15
【问题描述】:
我有一个表格,其中包含两个带有年份信息的属性(作为数字)
DateOfBirth Number(4) NULL,
DateDeceased Number(4) NULL,
我还做了一个检查约束,以确保日期正确,如下所示:
CONSTRAINT BirthValueCheck CHECK (DateOfBirth < DateDeceased),
CONSTRAINT ValidBirthYear CHECK (DateOfBirth LIKE '[1 - 2] [0 - 9] [0 - 9] [0 - 9]'),
CONSTRAINT ValidDeathYear CHECK (DateDeceased LIKE '[1 - 2] [0 - 9] [0 - 9] [0 - 9]')
当我像这样在表中插入一个新值时:
INSERT INTO ARTIST(ArtistID, LastName, FirstName, Nationality, DateOfBirth, DateDeceased)
VALUES(SEQ_ARTISTID.NEXTVAL, 'Miro', 'Joan', 'Spanish', '1893', '1983');
我收到一条错误消息:
Error starting at line : 104 in command -
INSERT INTO ARTIST(ArtistID, LastName, FirstName, Nationality, DateOfBirth, DateDeceased)
VALUES(SEQ_ARTISTID.NEXTVAL, 'Miro', 'Joan', 'Spanish', '1893', '1983')
Error report -
SQL Error: ORA-02290: CHECK-beperking (DBI279057.VALIDDEATHYEAR) is geschonden.
02290. 00000 - "check constraint (%s.%s) violated"
*Cause: The values being inserted do not satisfy the named check
*Action: do not insert values that violate the constraint.
我不明白为什么它会给我这个错误,因为 1983 在给定的约束下似乎是有效的。此外,它不会给我 DateOfBirth 检查约束的错误,它基本上是相同的约束,并且在 ValidDeathYear 约束之前声明。这是某种错误还是我错过了什么?
【问题讨论】:
标签: sql oracle matching sql-like check-constraints