1

我遇到了一个例外

ORA-02291: 违反完整性约束 (ADS.ADS_JOB_FAMILIES_F03) - 未找到父键

我发现表中的约束正在插入。

如何找到父键和子键...(列)。

注意:我正在使用 Oracle

4

1 回答 1

3

对于父表:

select * from all_constraints 
         where constraint_name in (
               select R_CONSTRAINT_NAME 
                 from all_constraints 
                where constraint_name = 'ADS_JOB_FAMILIES_F03'); 

对于父列:

select * 
  from all_cons_columns 
 where constraint_name in (
       select constraint_name 
         from all_constraints 
        where constraint_name in (
              select R_CONSTRAINT_NAME 
                from all_constraints 
               where constraint_name = 'ADS_JOB_FAMILIES_F03')); 

这并不完全完美,因为它忽略了约束的所有者。但我认为它会为你工作。

编辑:我现在什至发现了这个。这会给出这样的查询:

SELECT a.table_name, a.column_name, a.constraint_name, c.owner, 
       -- 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 a.constraint_name = 'ADS_JOB_FAMILIES_F03';
于 2012-08-08T18:53:45.120 回答