代码之家  ›  专栏  ›  技术社区  ›  ashwinsakthi

在约束中查找父关键字

  •  1
  • ashwinsakthi  · 技术社区  · 13 年前

    我遇到了一个例外

    ORA-02291:违反了完整性约束(ADS.ADS_JOB_FAMILIES_F03)-找不到父密钥

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

    如何查找父密钥和子密钥。。。(列)。

    注意:我使用的是Oracle

    1 回复  |  直到 13 年前
        1
  •  4
  •   Community CDub    8 年前

    对于父表:

    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')); 
    

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

    编辑:我现在甚至发现 this 。这将给出这样的查询:

    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';