所以我是Oracle新手,尝试按如下方式创建表:
create table Movies (
Title varchar2 primary key,
Rating NUMBER CONSTRAINT Rating_CHK CHECK (Rating BETWEEN 0 AND 10),
Length NUMBER CONSTRAINT Length_CHK CHECK (Length > 0),
ReleaseDate DATE CONSTRAINT RDATE_CHK
CHECK (ReleaseDate > to_date('1/1/1900', 'DD/Month/YYYY')),
CONSTRAINT title_pk PRIMARY KEY (Title)
)
根据我的任务,ReleaseDate必须有一个约束,仅强制执行191年1月1日之后的日期。我教授给我们的日期输入如下:2010年8月13日
你们中的一位专家能否看到我的问题所在?
答案 0 :(得分:4)
标题列的规范不正确,以及to_date函数调用中的日期字符串/格式模型组合。为TITLE指定列长度,并修复日期字符串以匹配格式模型。
试试这个:
create table Movies (
Title varchar2(100),
Rating NUMBER CONSTRAINT Rating_CHK CHECK (Rating BETWEEN 0 AND 10),
Length NUMBER CONSTRAINT Length_CHK CHECK (Length > 0),
ReleaseDate date CONSTRAINT RDATE_CHK CHECK (ReleaseDate > to_date('1/January/1900', 'DD/Month/YYYY')),
CONSTRAINT title_pk PRIMARY KEY (Title)
)
更新: 另外,Title是一个糟糕的主键。有没有听过两部同名电影?你能说“翻拍”吗?
另一个编辑。我猜你的教授给你的是日期格式,你应该让日期字符串与格式模型相匹配。我已经更新了我的答案。
答案 1 :(得分:2)
我认为TO_DATE中的'月'是寻找月份名称 - 而不是数字。 将第二个1更改为1月或将Month更改为MM。