具体是这样的:现在有两个表,即course表;(cno  varchar2(4)   primary key,
                                         cname  varchr2(16) not  null);
teaching表:(tname   varchar2(6),
              cno    
              ctime  
              cdate
              sclass
              primary   key (tname,cno,sclass),
              foreign   key (cno)
              referencs course (cno)
              on delete cascade);
这么一设定以后,很明显course是父表,而teaching 则是子表,因此,在父表中删除一条记录是,其相关的子表中的所有记录也应该删除(因为设置”连带删除“),但却实现不了,删除父表中的记录时,反而出现了,”ORA-02292: 违反完整约束条件 (TESTUSER.X3) - 已找到子记录日志“(只要子表中有相关联的记录cno),请高手赐教?

解决方案 »

  1.   

    不知道你在哪里作的删除,如果你是在delphi这样的程序里面,程序里面需要设置的,而不仅是数据库里面建立好cascade delete
      

  2.   

    大哥,你是不是设反了!?course是父表,你应该在父表上设置连带删除吧
      

  3.   

    应该没问题呀,Oracle支持级联删除。建议你给每一个约束起一个规范的名字。这样查错也方便。
      

  4.   

    参考
    http://expert.csdn.net/Expert/topic/1465/1465273.xml?temp=4.717654E-02
    讲的很清楚。
      

  5.   

    应该这么设置:course表;(cno  varchar2(4)   primary key,
               cname  varchr2(16) not  null,
               on delete cascade);
    teaching表:(tname   varchar2(6),
                  cno    
                  ctime  
                  cdate
                  sclass
                  primary   key (tname,cno,sclass),
                  foreign   key (cno)
                  referencs course (cno)
                  );然后执行delete course;就可以级联删除teaching表中的数据!
      

  6.   

    也可以在建表后使用语句
    alter table <table_name> add constraint <constraint_name> foreign key on (<columns>) references <parent_table>(<columns>) 
    on delete cascade;
      

  7.   

    偶弄错了!!!可能是你是在delphi这样的程序里面,程序里面需要设置的,而不仅是数据库里面建立好cascade delete
      

  8.   

    : chen_cyh(逐波流) 'go out!?'
      

  9.   

    我提个建议:您检查一下你 course表的cno除了在teaching中被设置了外键外还有没有其它表设置类似的course, Cno的外键
      

  10.   

    兄弟,你搞错了吧。按你的语句的主体语法是完全正确的。
    chen_cyh(逐波流)兄可不要误导别人喔。凡事重在试验。