未找到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.