【发布时间】:2016-07-15 05:43:45
【问题描述】:
我正在创建一个这样的表,
CREATE TABLE ARTIST (
ArtistID Int NOT NULL IDENTITY(1,1),
LastName Char(25) NOT NULL,
FirstName Char(25) NOT NULL,
Nationality Char(30) NULL,
DateOfBirth Numeric(4) NULL,
DateDeceased Numeric(4) NULL,
CONSTRAINT ArtistPK PRIMARY KEY(ArtistID),
CONSTRAINT ArtistAK1 UNIQUE(LastName, FirstName),
CONSTRAINT BirthValuesCheck 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]')
);
我得到这个错误:
错误报告 - SQL 错误:ORA-00907:缺少右括号 00907. 00000 - “缺少右括号”
知道为什么吗?
【问题讨论】:
-
这不是一个了不起的答案,但是您是否尝试过删除约束然后一一添加以查看哪个失败?
-
为什么你的名字和姓氏有
UNIQUE约束?不能有多个同名艺术家吗?另外,为什么不使用DATE日期类型作为出生/死亡日期? -
char(25)和char(30)数据类型几乎可以肯定是一个糟糕的选择。姓名和国籍是可变长度字符串,请改用varchar2。您的DateOfBirth和DateDeceased几乎可以肯定是date而不仅仅是存储数字年份。如果要对数字字段进行检查约束,请进行数字比较(即YearOfBirth BETWEEN 1000 and 2999)