Oracle所有外键引用

AJM*_*AJM 17 oracle

我继承了一个模式,所以对那里的东西没有完全的知识/信心.

我有一个带有projectId的项目表.有很多其他表按项目ID引用此表.我想要做的是运行查询来建立:

  1. 哪些表对项目id的项目表具有外键引用
  2. 哪些表有一个名为project id的列(如果未设置外键).

如果是SQL Server我知道如何查询元数据但是如何在Oracle中执行此操作?

Rob*_*ijk 22

1)

select table_name
  from all_constraints
 where r_constraint_name = [your pk/uk constraint on PROJECTS(id)]
Run Code Online (Sandbox Code Playgroud)

2)

select table_name
  from all_tab_columns
 where column_name = 'PROJECT_ID'
Run Code Online (Sandbox Code Playgroud)

您可能希望添加包含OWNER列的额外谓词.

问候,Rob.


Sta*_*tan 18

好.这里有一个请求,为您提供引用的表和列:

SELECT
 c_list.CONSTRAINT_NAME as NAME,
 substr(c_src.COLUMN_NAME, 1, 20) as SRC_COLUMN,
 c_dest.TABLE_NAME as DEST_TABLE,
 substr(c_dest.COLUMN_NAME, 1, 20) as DEST_COLUMN
FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest
WHERE c_list.CONSTRAINT_NAME   = c_src.CONSTRAINT_NAME
 AND  c_list.OWNER             = c_src.OWNER
 AND  c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
 AND  c_list.OWNER             = c_dest.OWNER
 AND  c_list.CONSTRAINT_TYPE = 'R'
 AND  c_src.OWNER      = '<your-schema-here>'
 AND  c_src.TABLE_NAME = '<your-table-here>'
GROUP BY c_list.CONSTRAINT_NAME, c_src.TABLE_NAME,
    c_src.COLUMN_NAME, c_dest.TABLE_NAME, c_dest.COLUMN_NAME;
Run Code Online (Sandbox Code Playgroud)

哪个给你这样的东西:

NAME                  |SRC_COLUMN      |DEST_TABLE            | DEST_COLUMN
----------------------|----------------|----------------------|-----------
CFK_RUB_FOR           |FOR_URN         |T03_FORMAT            |FOR_URN
CFK_RUB_RUB           |RUB_RUB_URN     |T01_RUBRIQUE          |RUB_URN
CFK_RUB_SUP           |SUP_URN         |T01_SUPPORT           |SUP_URN
CFK_RUB_PRD           |PRD_URN         |T05_PRODUIT           |PRD_URN
Run Code Online (Sandbox Code Playgroud)

如果结果可用,则可以忘记substr()函数.这不是我的情况.