问题如标题,直接导致了后面几个引用了外键的表出现ORA_02291的错误。
Insert in Table 2
ORA-o2291:integrity constraint (SUCCESS.FK_TABLE2_COU1)violated -parent key not found"COU1"为 table1 的主键,为table2\table3\table4的外键。
其中COU1 在表2\3中是可以为空的。
该如何解决?谢谢!(因为所有表都是从记事本load数据,初步估计是不是记事本中的数据出现了重复的COU1,导致在Load 表table1时出错,引起其他关联的表的错误,现在table1已经load到数据,但是比原始数据多了刚好一般,txt中为400万行,这个有800W行,但是又找不到重复的row。)谢谢!

解决方案 »

  1.   

    外键是一定要在主表存在的吧,如果TABLE2的COU1为空,在TABLE1中就找不到COU1的值了。
      

  2.   


    不太明白楼主的问题是什么。2266和2291的错误原因很明显,就是主外键不一致。  table1的主键既然是COU1,那怎么会有重复的呢? 如果怀疑有重复,可以select cou1,count(*) from table1 group by cou1 having count(*)>1 来找到有重复的cou1值。
      

  3.   


    只要该字段本身可空,那就可以为空。例如:
    create table tsta(id1 int not null primary key, name varchar2(10))
    create table tstb(id2 int not null, id1 int);
    --增加外键约束
    alter table tstb add constraint foreign key;--主表生成两条记录
    insert into tsta values( 1 ,'1111');
    insert into tsta values( 2 ,'222');---有外键的表插入以下三行都没问题
    insert into tstb values(1, 1);
    insert into tstb values(1, 2);
    insert into tstb values(1, null);--但插入下面就报错, ora 2291
    insert into tstb values(1, 3);还是没搞明白楼主说的文件中400w,表中800w数据是怎么回事。
      

  4.   

    前面外键约束的SQL没写全:
    alter table tstb add constraint fk_tstb_id1 foreign key (id1) references tsta (id2);
      

  5.   

    晕倒,又写错了:
    alter table tstb add constraint fk_tstb_id1 foreign key (id1) references tsta (id1); 
      

  6.   

    呵呵,谢谢!
    我知道你写的是什么意思.就是插入的作为外键的值在主键中是没有的.
    应该不会是这样的问题啊!我在插入table2外键的时候并没有去关心它真正的value.
    如果不是这个原因的话,在原始数据(也就是数据表装载的txt文件中的数据)存在id1有重复的项,会不会也是出现这个错误?
    补充:在给table2 load 数据的时候报错:
    Constraint RDF_LINK_NODE.FK_RDFLINKNODE_LINKID was disabled and novalidate before the load.
    Constraint RDF_LINK_NODE.FK_RDFLINKNODE_NODEID was disabled and novalidate before the load.这个错误就直接导致数据没有load到表中。
    该如何解决呢?非常感谢。
      

  7.   

    已经解决。
    在insert table 之前需要disable 主键和相关的外键约束