使用to_date进行Oracle检查约束问题

时间:2010-09-10 18:53:22

标签: sql oracle

所以我是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日

你们中的一位专家能否看到我的问题所在?

2 个答案:

答案 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。