create table demo4
(
id1 int not null,
id2 int not null,
name varchar2(10) not null,
sex varchar2(10) null,
flag int null,
birth date null,
num1 int null,
num2 int  null,
constraint pk_demo primary key(id1,id2), 
constraint U_2 unique(name), 
constraint C_2 check(sex in('male','female','no')),
constraint C_3 check(flag=0 or flag=1),
constraint C_4 check(num1 > 0 and num1 < 100),
constraint C_5 check(num2 > 0 and num2 < 100),
constraint C_6 check(num1+num2 > 10 and num1+num2 < 150),
constraint C_7 check(birth > to_date('1900-01-01','yyyy-mm-dd') and birth < sysdate)
)
最后一句有问题,
出现如下错误:
ORA-02436: 日期或系统变量在 CHECK 约束条件中指定错误请各位兄弟姐妹帮看下呗!!

解决方案 »

  1.   

    我想对birth这列加限制条件:从1900年1月1日到系统当前日期,如何加这个限制呢?
      

  2.   

    constraint 不是建立在表定义中的列里面的应该用alter table demo4 add constraint pk_demo primary key(id1,id2)...
    其他的都类似
      

  3.   

    constraint C_7 check(birth > to_date('1900-01-01','yyyy-mm-dd') and birth < sysdate) 
    其中SYSDATE在建表中不能使用,去除或者改为具体的日期即可
      

  4.   

    没有办法,ORACLE的CHECK中不能用sysdate。 这个需求只能在触发器中来实现。