2

我可以肯定地说我是 SQL 新手,因此在编写将数据插入表的代码时,我收到了一个错误报告,我似乎无法理解它的含义,因此我希望有人可能会能够告诉我我犯了什么愚蠢的错误并消除了很多压力^.^

这是我得到的错误代码:

错误报告:SQL 错误:ORA-02291:违反完整性约束 (H.VENDOR_ID_FK) - 未找到父键 02291. 00000 - “违反完整性约束 (%s.%s) - 未找到父键” *原因:外键value 没有匹配的主键值。*操作:删除外键或添加匹配的主键。

提前致谢!

4

1 回答 1

1

如果我运行所有这些,我会在此之前遇到几个错误,我现在将跳过这些错误......反对这个 FK 的第一个似乎是:

INSERT INTO parts_order VALUES
        (2
        ,2
        ,95115995
        ,'Delivered'
        ,'04/dec/2012'
        ,'01/jan/2013'
        ,'20/dec/2012'
        ,'Handler Pro'
        );

最好将列放在插入子句中,这样您就可以看到哪些行(INSERT INTO parts_order (order_id, job_id, vendor_id, ...) VALUES (4, 4, 95115995, ...)即未来。最好不要依赖隐式日期转换(即使用to_char('05/jan/2013', 'DD/mon/YYYY').

无论如何......它抱怨的约束是VENDOR_ID_FK,我们可以在表定义中看到:

CREATE TABLE parts_order
( order_id NUMBER(11)   
    CONSTRAINT order_id_pk  PRIMARY KEY
  ,job_id NUMBER(11)    
    CONSTRAINT job_id_fk REFERENCES maintenance(job_id)
  ,vendor_id    NUMBER(11)  
    CONSTRAINT vendor_id_fk REFERENCES parts_vendor(part_vendor_id)
  ,parts_status VARCHAR2(20)
  ,date_ordered DATE
  ,date_arrived DATE
  ,date_delivery_due    DATE
  ,part_name VARCHAR2(20) 
    CONSTRAINT part_name_nn NOT NULL);

……反对parts_vendor(part_vendor_id)。错误的意思是vendor_id您插入的 , , 在父表中95115995不存在- 这是真的,parts_vendor您只插入带有,和.part_vendor_id1234

约束按预期工作 - 它阻止您在没有“父”的情况下放入“子”记录。您需要parts_vendor为 ID 创建一条记录95115995,或者将vendor_id您尝试插入的值更改为parts_order已经存在的值。

于 2013-02-21T16:08:22.317 回答