首页 文章

查看oracle关于主/外键约束的元数据

提问于
浏览
3

哪个表包含有关约束的详细信息(例如外键所指的表)?表'all_cons_columns','all_constraints'仅包含约束的名称,这些名称不是很有帮助 . 我目前正在使用dbms_metadata.get_ddl()但它不适用于所有数据库 .

谢谢 .

4 回答

  • 5

    它就在那里:ALL_CONSTRAINTS中的列R_CONSTRAINT_NAME包含外键引用的PK / UK约束的名称 . 然后,您可以查找该约束以获取引用表的TABLE_NAME .

    查看ALL_CONS_COLUMNS时,外键中列的POSITION将与主/唯一键中列的POSITION匹配 .

  • 3

    此语句列出表,约束名称和外键表名称:

    select c.table_name,c.constraint_name,  --c.r_constraint_name, 
      cc.table_name
    from all_constraints c
    inner join all_constraints cc on c.r_constraint_name = cc.constraint_name
    
  • 0

    要检索外键并生成用于创建这些外键的脚本,可以使用以下查询:

    SELECT 
       'ALTER TABLE ' || a.table_name || ' ADD CONSTRAINT ' || a.constraint_name 
       || ' FOREIGN KEY (' || a.column_name || ') REFERENCES ' || jcol.table_name 
       || ' (' || jcol.column_name || ');' as commandforeign
    FROM
       (SELECT 
           uc.table_name, uc.constraint_name, uc.r_constraint_name, col.column_name
        FROM 
           USER_CONSTRAINTS uc, USER_CONS_COLUMNS col
        WHERE 
           uc.constraint_type='R' and uc.constraint_name=col.constraint_name) a
     INNER JOIN 
        USER_CONS_COLUMNS jcol
     ON 
        a.r_constraint_name=jcol.constraint_name;
    
  • 3

    看看:Reverse Engineering a Data Model . 基于此,我做了Python program that dumps Oracle db schema to text . 有 PRIMARY_KEYS_INFO_SQLFOREIGN_KEYS_INFO_SQL 做你感兴趣的事情 .

相关问题