查看有关主键/外键约束条件的Oracle元数据

nkhmeac6  于 2022-11-03  发布在  Oracle
关注(0)|答案(5)|浏览(219)

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

  • 谢谢-谢谢
amrnrhlw

amrnrhlw1#

这一切都在那里:ALL_CONSTRAINTS中的列R_CONSTRAINT_NAME包含外键的被引用PK/UK约束条件的名称。然后,可以查找该约束条件以获取引用表的TABLE_NAME。
在查看ALL_CONS_COLUMNS时,外键中列的POSITION将与主键/唯一键中列的POSITION匹配。

dzhpxtsq

dzhpxtsq2#

此语句列出表,约束条件名称与外键表名称:

  1. select c.table_name,c.constraint_name, --c.r_constraint_name,
  2. cc.table_name
  3. from all_constraints c
  4. inner join all_constraints cc on c.r_constraint_name = cc.constraint_name
kyxcudwk

kyxcudwk3#

为了检索外键并生成一个脚本来创建它们,可以使用以下查询:

  1. SELECT
  2. 'ALTER TABLE ' || a.table_name || ' ADD CONSTRAINT ' || a.constraint_name
  3. || ' FOREIGN KEY (' || a.column_name || ') REFERENCES ' || jcol.table_name
  4. || ' (' || jcol.column_name || ');' as commandforeign
  5. FROM
  6. (SELECT
  7. uc.table_name, uc.constraint_name, uc.r_constraint_name, col.column_name
  8. FROM
  9. USER_CONSTRAINTS uc, USER_CONS_COLUMNS col
  10. WHERE
  11. uc.constraint_type='R' and uc.constraint_name=col.constraint_name) a
  12. INNER JOIN
  13. USER_CONS_COLUMNS jcol
  14. ON
  15. a.r_constraint_name=jcol.constraint_name;
tvz2xvvm

tvz2xvvm4#

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

m4pnthwp

m4pnthwp5#

使用Oracle XE示例数据库。我想标识模式/表上的主键和外键。下面是如何...

  1. SELECT acc.column_name, ac.constraint_type, ac.status, fkc.table_name, fkc.column_name
  2. FROM all_cons_columns acc
  3. LEFT JOIN all_constraints ac ON ac.constraint_name = acc.constraint_name
  4. LEFT OUTER JOIN all_cons_columns fkc ON fkc.constraint_name = ac.r_constraint_name
  5. WHERE acc.owner = 'OT'
  6. AND acc.table_name = 'ORDERS'
  7. AND ac.constraint_type IN ('P', 'R');

输出(格式化列宽后)如下所示...

  1. COLUMN_NAME C STATUS TABLE_NAME COLUMN_NAME
  2. -------------------- - -------- -------------------- --------------------
  3. ORDER_ID P ENABLED
  4. CUSTOMER_ID R ENABLED CUSTOMERS CUSTOMER_ID
  5. SALESMAN_ID R ENABLED EMPLOYEES EMPLOYEE_ID

在这里,我们可以看到(对于ORDERS表)ORDER_ID是主键,并且有两个外键分别引用CUSTOMERS表和EMPLOYEES表。

展开查看全部

相关问题