未找到Oracle 10g的父密钥

未找到Oracle 10g的父密钥,oracle,Oracle,我有两张桌子: SQL> desc SEGMENT Name Null? Type ----------------------------------------- -------- ---------------------------- INDIP NOT NULL VARCHAR2(11) NOMSEGMENT

我有两张桌子:

SQL> desc SEGMENT
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 INDIP                                     NOT NULL VARCHAR2(11)
 NOMSEGMENT                                NOT NULL VARCHAR2(20)
 ETAGE  

SQL> desc POSTE
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NPOSTE                                    NOT NULL VARCHAR2(7)
 NOMPOSTE                                  NOT NULL VARCHAR2(20)
 INDIP                                              VARCHAR2(11)
 AD                                                 VARCHAR2(3)
 TYPEPOSTE                                          VARCHAR2(9)
 NSALLE                                             VARCHAR2(7)
我想添加一个约束,如下所示:

 ALTER TABLE "POSTE" ADD CONSTRAINT "FK_POSTE_SEGMENT" FOREIGN KEY ("INDIP") REFERENCES "SEGMENT" ("INDIP") ENABLE;
但我得到了这个错误信息:

第1行错误:ORA-02298:无法验证AIMAD.FK_POSTE_段- 找不到父密钥


如何解决此问题

您应该检查哪些POSTE表在INDIP列中不包含值,哪些在SEGMENT表的INDIP列中不存在

Oracle还提供在NOVALIDATE状态下创建约束的功能,这可防止Oracle在创建约束期间检查数据:

SQL> alter table t_c add constraint t_c_x foreign key(x)
  2  references t(x) enable novalidate;

Table altered.
但这可能会产生不良的副作用,因为两个表中的数据不一致

SQL> alter table t_c add constraint t_c_x foreign key(x)
  2  references t(x) enable novalidate;

Table altered.