ORA-02291: 当我尝试添加数据时出现完整性约束错误
Posted
技术标签:
【中文标题】ORA-02291: 当我尝试添加数据时出现完整性约束错误【英文标题】:ORA-02291: integrity constraint error when i try add data 【发布时间】:2020-02-24 00:08:16 【问题描述】:我正在使用 Oracle Apex 创建案例管理系统。在我的案例表中,我想要 3 列来计算一个案例有多少展品、任务和笔记。我尝试在案例表中将展览、任务和注释表作为外键引用,然后在 apex 应用程序构建器中我将使用查询
SELECT COUNT (CASE_ID) FROM Exhibit WHERE CASE_ID = CASE_ID;
这些是我的桌子:
CREATE TABLE Exhibit(
Exhibit_id int PRIMARY KEY,
Case_id int,
Exhibit_Analyst VARCHAR(30),
Exhibit_Type VARCHAR(40),
Exhibit_Priority VARCHAR(5),
Exhibit_Description VARCHAR(500),
Date_Seized DATE,
Exhibit_Location VARCHAR(50));
CREATE TABLE Task(
Task_id int PRIMARY KEY,
Case_id int,
Task_Name VARCHAR(30),
Task_Description VARCHAR(500),
Task_Start_Date TIMESTAMP,
Task_Deadline TIMESTAMP,
Task_Status VARCHAR(20));
CREATE TABLE Note(
Note_id int PRIMARY KEY,
Case_id int,
Note_Timestamp TIMESTAMP,
Note VARCHAR(500));
CREATE TABLE Analyst(
Analyst_id int PRIMARY KEY,
Analyst_Name VARCHAR(30),
Analyst_dob DATE);
CREATE TABLE Case(
Case_ID int PRIMARY KEY,
Case_Name VARCHAR(50),
Case_Type VARCHAR(20),
Analyst_Name VARCHAR(50),
Case_Started TIMESTAMP,
Last_Modified TIMESTAMP,
Case_Status VARCHAR(15),
Exhibit_id int REFERENCES Exhibit(Exhibit_id),
Task_id int REFERENCES Task(Task_id),
Note_id int REFERENCES Note(Note_id));
当我尝试在应用程序中插入一行时,它会返回此错误
ORA-02291:违反完整性约束 (TOBY.SYS_C0091649974) - 找不到父键
我肯定做错了什么,任何帮助将不胜感激。谢谢
【问题讨论】:
在哪个表中插入一行? 【参考方案1】:我认为您正在尝试在表中添加值(使用外键),而表中没有匹配值(使用主键)。
要解决这个问题:您需要将值添加到具有主键的表中,然后将值插入到外部表中。
【讨论】:
【参考方案2】:您要插入什么?发布您的插入语句
或者,检查该约束的作用。从下面的查询中检查search_condition
select
constraint_name,
table_name,
case constraint_type
when 'C' then 'check constraint on a table'
when 'P' then 'primary key'
when 'U' then 'unique key'
when 'R' then 'referential integrity'
when 'V' then 'with check option, on a view'
when 'O' then 'with read only, on a view'
end constraint_definition,
search_condition
from all_constraints
where owner = 'TOBY'
and constraint_name = 'SYS_C0091649974'
;
【讨论】:
【参考方案3】:检查哪些表有这个约束:
SELECT C.OWNER,
A.TABLE_NAME,
A.COLUMN_NAME,
A.CONSTRAINT_NAME,
-- referenced pk
C.R_OWNER,
C_PK.TABLE_NAME R_TABLE_NAME,
C_PK.CONSTRAINT_NAME R_PK
FROM ALL_CONS_COLUMNS A
JOIN ALL_CONSTRAINTS C ON A.OWNER = C.OWNER
AND A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
JOIN ALL_CONSTRAINTS C_PK ON C.R_OWNER = C_PK.OWNER
AND C.R_CONSTRAINT_NAME = C_PK.CONSTRAINT_NAME
WHERE C.CONSTRAINT_TYPE = 'R' AND A.CONSTRAINT_NAME = 'SYS_C0091649974';
为了纠正此错误,您需要先将尝试放入子表中的值插入到父表中。作为父行插入后,您可以返回并将值插入到子表中。
【讨论】:
以上是关于ORA-02291: 当我尝试添加数据时出现完整性约束错误的主要内容,如果未能解决你的问题,请参考以下文章
ORA-02291: 违反完整约束条件 - 未找到父项关键字
ORA-02291: 违反完整性约束 (PRUEBA4.AUTO_MARCA_FK) - 未找到父键
ORA-02291: 违反完整约束条件 (*) - 未找到父项关键字
SQL ORA-02291: 违反完整性约束 - 未找到父键
ORA-02291: 违反完整约束条件 (*) - 未找到父项关键字
ORA-02291: 违反完整性约束 (OPS$P2417335.VOD_FILM_CLASS_FK) - 未找到父密钥