oracle完整性约束

时间:2012-07-11 21:47:05

标签: oracle

这是我第一次使用Oracle。

我手动将一些东西插入数据库:

insert into ATTR_TYPE_VALUE (ATTR_TYPE_ID, VALID_VALUE, CREATED_BY) 
(select ATTR_TYPE_ID, 'Ad', 2 from ATTR_TYPE where VALUE = 'ind')

我收到以下错误:

  

第1行的错误:ORA-02291:完整性约束   违反了(LO.ATTR_TYPE_VALUE_FK02) - 未找到父密钥

以下是我在研究中发现的内容:

对于insert语句,当您尝试插入没有匹配父项的子项时,此ORA-02291错误很常见,如外键约束所定义。在这种情况下,您需要将父行添加到表中,然后重新插入子表行。

这是否意味着VALUE='ind'表中不存在ATTR_TYPE

1 个答案:

答案 0 :(得分:3)

您定义了哪些列ATTR_TYPE_VALUE_FK02以及您引用了哪些表和列?

SELECT fk_columns.table_name,
       fk_columns.column_name,
       fk_columns.position,
       pk_columns.table_name,
       pk_columns.column_name,
       pk_columns.position
  FROM all_constraints fk_constraint,
       all_cons_columns fk_columns,
       all_cons_columns pk_columns
 WHERE fk_constraint.owner             = 'LO'
   AND fk_constraint.constraint_name   = 'ATTR_TYPE_VALUE_FK02'
   AND fk_constraint.owner             = fk_columns.owner
   AND fk_constraint.constraint_name   = fk_columns.constraint_name
   AND fk_constraint.r_owner           = pk_columns.owner
   AND fk_constraint.r_constraint_name = pk_columns.constraint_name