问一个Oracle的问题
orderr表
orderNo custNo orderDate  dilivDate
21 10001 2002-1-5  2002-1-5
22 10002 2002-1-15  2002-1-16
23 10003 2002-2-10 2002-2-20
24 10002 2002-3-4  2002-3-5
使用ALTER TABLE添加约束delivDateOverorderDate使得表中的送货日期delivDate字段的值不小于订货日期orderDate字段的值。

解决方案 »

  1.   

    oracle估计实现不了,可能需要触发器才能实现吧
      

  2.   

    SQL> create table orderr(orderNo varchar2(20),
      2        custNo varchar2(20), orderDate date,
      3        dilivDate date, constraint c_ck_date check(dilivDate>=orderDate));
     
    Table created
     
    SQL> insert into orderr values('21','10001',date'2002-1-5',date'2002-1-5');
     
    1 row inserted
     
    SQL> insert into orderr values('22','10002',date'2002-2-5',date'2002-2-1');
     
    insert into orderr values('22','10002',date'2002-2-5',date'2002-2-1')
     
    ORA-02290: 违反检查约束条件 (TEST.C_CK_DATE)
     
    SQL> 
    --如果表已经建好,可以下面语句增加约束
    alter table orderr add constraint c_ck_date check(dilivDate>=orderDate);
      

  3.   

    --如果orderDate、dilivDate为字符型
    alter table orderr add constraint c_ck_date 
       check(to_date(dilivdate,'yyyy-mm-dd')>=to_date(orderdate,'yyyy-mm-dd'));
      

  4.   

    使用check约束如果你是表里面有数据,估计alter table不能实现你的需求,
    你可以重建表,并添加check(to_date(dilivdate,'yyyy-mm-dd')>=to_date(orderdate,'yyyy-mm-dd'));
    约束,就实现"送货日期delivDate字段的值不小于订货日期orderDate字段的值"了;