Sql 找不到ORA-02291父密钥,第一个
我的第一个编程程序是Oracle数据库研究生证书程序,该教科书在某些地方对Oracle不友好(它是一本通用数据库教科书)。我不得不重写CREATETABLE命令,我的想法写在下面 这些表是在我的数据库中创建的,我可以在vendor表中插入值;但是,每次我在产品表中插入值时,我都会收到Sql 找不到ORA-02291父密钥,第一个,sql,oracle,oracle12c,Sql,Oracle,Oracle12c,我的第一个编程程序是Oracle数据库研究生证书程序,该教科书在某些地方对Oracle不友好(它是一本通用数据库教科书)。我不得不重写CREATETABLE命令,我的想法写在下面 这些表是在我的数据库中创建的,我可以在vendor表中插入值;但是,每次我在产品表中插入值时,我都会收到ORA-02291完整性错误 我知道在vendor表中找不到父键,但我不知道为什么。我在这两个表上尝试了列和表约束的组合,但没有任何效果。如果有人能帮我建立这种关系,这样我就可以练习了,那将是非常棒的 CREATE
ORA-02291完整性错误
我知道在vendor表中找不到父键,但我不知道为什么。我在这两个表上尝试了列和表约束的组合,但没有任何效果。如果有人能帮我建立这种关系,这样我就可以练习了,那将是非常棒的
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)
);
编辑
关系设置正确 只能在主表中插入与主键值匹配的外键值。在您的示例中,您正在插入带有
V_code=25595
的产品,但从未插入带有此V_code
的供应商
也许您打算稍后插入供应商。这不起作用,因为数据库正在为每个命令强制执行约束。因此,首先插入供应商,然后追加其产品
如果要删除供应商,请先删除其产品,然后删除供应商,除非您正在使用。关系设置正确 只能在主表中插入与主键值匹配的外键值。在您的示例中,您正在插入带有
V_code=25595
的产品,但从未插入带有此V_code
的供应商
也许您打算稍后插入供应商。这不起作用,因为数据库正在为每个命令强制执行约束。因此,首先插入供应商,然后追加其产品
如果要删除供应商,请先删除其产品,然后删除供应商,除非您正在使用。插入语句在哪里??请显示一个请正确格式化您的代码。如果您没有先在供应商中插入一条记录,那么当您尝试在产品中插入“我意识到在供应商表中找不到父项密钥,但我不知道为什么”时,您会出现此错误。您能详细说明此语句吗?是的,我在vendor first@oldprogrammer中插入了请不要将有关问题的重要信息(如插入语句)放入注释中。相反,您应该编辑问题(标签上方有一个可点击的
edit
按钮),并将信息直接添加到问题中。这次我已经做到了。现在-您还可以添加导致错误的INSERT语句吗?这就是插入产品的语句。谢谢。养成习惯,总是在所有INSERT语句中包含字段列表。不包括字段列表将使您的代码从我参加过的每次代码审查中被踢出,因为当(不是“如果”)一个字段添加到供应商表时,您的语句将立即中断。您的insert语句在哪里??请显示一个请正确格式化您的代码。如果您没有先在供应商中插入一条记录,那么当您尝试在产品中插入“我意识到在供应商表中找不到父项密钥,但我不知道为什么”时,您会出现此错误。您能详细说明此语句吗?是的,我在vendor first@oldprogrammer中插入了请不要将有关问题的重要信息(如插入语句)放入注释中。相反,您应该编辑问题(标签上方有一个可点击的edit
按钮),并将信息直接添加到问题中。这次我已经做到了。现在-您还可以添加导致错误的INSERT语句吗?这就是插入产品的语句。谢谢。养成习惯,总是在所有INSERT语句中包含字段列表。不包括字段列表将使您的代码从我参加过的每次代码审查中被踢出,因为当(不是“如果”)一个字段添加到供应商表时,您的声明将立即中断。可以安排约束,以便执行任何订单插入;定义的约束仅在事务完成时进行检查,因此如果在事务中执行了设置约束所有延迟的
选项,或者如果执行了更改会话设置所有延迟的约束
以使所有约束在当前会话的延迟模式下起作用,然后插入可以是任何顺序,并且只有在事务提交时才会被验证。一般来说,我支持以正确的顺序执行insert的概念,因为在很少的情况下无法执行insertwork@Olivier感谢您指出V_代码值不匹配。昨晚我想到了这一点,但我不想相信教科书上的说明是错误的!我决定将V_CODE=25595插入到第一个INSERT-into-VENDOR命令(而不是21225)中,我的INSERT-into-PRODUCT命令运行良好。值得一提的是,教科书建议我们在创建产品和供应商表后开始使用前三个INSERT命令,使用不匹配的V_代码不是一个好主意。我想从现在开始,我将从关系一侧的所有INSERT命令开始,然后移到多面。可以安排约束,以便执行任何订单插入;定义的约束仅在事务完成时进行检查,因此如果在事务中执行了设置约束所有延迟的
选项,或者如果执行了更改会话设置所有延迟的约束
以使所有约束在当前会话的延迟模式下起作用,然后插入可以是任何顺序,并且只有在事务提交时才会被验证。一般来说,我支持执行的概念
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);