首先找不到ORA-02291父键

时间:2017-12-24 16:45:38

标签: sql oracle oracle12c

我的第一个编程程序是Oracle数据库研究生证书程序,并且教科书在某些地方不是Oracle友好的(它是一个通用的数据库教科书)。我不得不重写CREATE表命令,我想出的是下面的内容。

表是在我的数据库中创建的,我可以将值插入到供应商表中;但是,每次我在产品表中插入值时,都会收到ORA-02291 integrity error

我意识到在供应商表中找不到父密钥,但我不知道为什么。我在两个表上尝试了列和表约束的组合,但没有任何作用。如果有人可以帮助我建立这种关系,那么我可以练习那将是伟大的!

 CREATE TABLE VENDOR(

 V_CODE     INTEGER         NOT NULL    CONSTRAINT VENDOR_P_K  PRIMARY KEY,
 V_NAME     VARCHAR(35)     NOT NULL,
 V_CONTACT  VARCHAR(25)     NOT NULL,
 V_AREACODE CHAR(3)         NOT NULL,
 V_PHONE    CHAR(8)         NOT NULL,
 V_STATE    CHAR(2)         NOT NULL,
 V_ORDER    CHAR(1)         NOT NULL
 );

----------------------------------------------------------------------------
CREATE TABLE PRODUCT(

 P_CODE     VARCHAR2(10)            CONSTRAINT PRODUCT_P_CODE_PK  PRIMARY KEY,
 P_DESCRIPT VARCHAR2(35)            NOT NULL,
 P_INDATE   DATE                    NOT NULL,
 P_QOH      NUMBER                  NOT NULL,
 P_MIN      NUMBER                  NOT NULL,
 P_PRICE    NUMBER(8,2)             NOT NULL,
 P_DISCOUNT NUMBER(5,2)             NOT NULL,
 V_CODE     INTEGER                 NOT NULL,
 CONSTRAINT V_CODE_FK               FOREIGN KEY (V_CODE) REFERENCES VENDOR (V_CODE)
 );

修改

INSERT INTO VENDOR 2
  VALUES (21225, 'Bryson, Inc.', 'Smithson', '615','223-3234','TN','Y');

INSERT INTO VENDOR 2
  VALUES (21226,'Superloo, Inc.','Flushing','904','215-8995','FL','N');

INSERT INTO PRODUCT 2 
   VALUES ('11QER/31','Power painter, 15 psi., 3-nozzle','03-Nov-13',8,5,109.99,0.00,25595);

1 个答案:

答案 0 :(得分:3)

关系设置正确。

您只能在主表中插入与主键值匹配的外键值。在您的示例中,您插入的产品包含V_CODE = 25595,但您永远不会使用此V_CODE插入供应商。

也许您打算稍后插入供应商。这不起作用,因为数据库正在为每个命令强制执行约束。因此,请先插入供应商,然后再附加其产品。

如果要删除供应商,请先删除其产品,然后删除供应商,除非您使用的是Foreign Keys with Cascade Delete