现有这样一张表 T_BOOK_SALLS,字段定义如下: SALLID         NUMBER      PK BOOKID         NUMBER      FK CATLOGID       NUMBER      FK ORIGNAL_PRICE  NUMBER(10,2)  GIVEN_PRICE    NUMBER(10,2) SALL_PRICE     NUMBER(10,2)
 现在因为种种原因,要求表中当BOOKID和CATLOGID相同时,ORIGNAL_PRICE和GIVEN_PRICE必须也相同,Oracle提供的约束好象不能实现这种要求,请教大家有
 没有什么好的办法能从数据库级别来实现?万分感谢您的指教

解决方案 »

  1.   

    CREATE TABLE A(A INT,B INT, C INT, D INT);
    T@RAC>alter table a add constraint ch check ((case when a=b then case (c-d) when 0 then 0 else 1 end else 0 end  ) = 0);Table altered.Elapsed: 00:00:00.42
    T@RAC>insert into a values(1,1,2,null);
    insert into a values(1,1,2,null)
    *
    ERROR at line 1:
    ORA-02290: check constraint (T.CH) violated
    Elapsed: 00:00:00.06
    T@RAC>insert into a values(1,1,2,3;
    insert into a values(1,1,2,3
                               *
    ERROR at line 1:
    ORA-00917: missing comma
    Elapsed: 00:00:00.03
    T@RAC>insert into a values(1,1,2,3);
    insert into a values(1,1,2,3)
    *
    ERROR at line 1:
    ORA-02290: check constraint (T.CH) violated
    Elapsed: 00:00:00.01
    T@RAC>insert into a values(1,0,2,3);1 row created.Elapsed: 00:00:00.10
    T@RAC>insert into a values(1,null,2,3);1 row created.Elapsed: 00:00:00.28
    T@RAC>
      

  2.   

    十分感谢楼上的老兄,不过可能是我没表达清楚,
    目的是当row a 的BOOKID和CATLOGID与row b的相同时 row a和b必须要具有相同的ORIGNAL_PRICE和GIVEN_PRICE
    十分抱歉浪费了您的时间
      

  3.   

    分表的话对现有的系统改动就太大了,而且我认为在现在的需求下,分表的开销是很大的.目前的方式就是害怕在并发的时候破坏了数据的一致性
    因为依赖于distinct,所以需要实现前面提出的那种约束.