sql - Oracle:获取所有约束/列(主键和外键)

标签 sql oracle metadata

此 SQL 查询:

SELECT a.table_name, a.column_name, a.constraint_name, c.owner, 
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.owner = 'BRANCH_DEV'
AND a.table_name IN ( 'table1','table2' );

返回所有者的约束BRANCH_DEV和表/列名称。但是,我还需要获取“键表”(原始表)中列的名称。

最佳答案

将约束列 View 加入到 pk 约束 View 中:

SELECT a.table_name
     , a.column_name
     , a.constraint_name
     , c.owner
     , c.r_owner
     , c_pk.table_name      r_table_name
     , c_pk.constraint_name r_pk
     , cc_pk.column_name    r_column_name
  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  )
  JOIN all_cons_columns cc_pk   on (cc_pk.constraint_name   = c_pk.constraint_name      AND cc_pk.owner         = c_pk.owner            )
 WHERE a.owner = 'BRANCH_DEV'
   AND a.table_name IN ( 'table1','table2' )
     ;

关于sql - Oracle:获取所有约束/列(主键和外键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022904/

相关文章:

swift - 从 M3U8 流视频中获取 Swift ios 8 中的定时元数据

sql - 更改存储过程显示 `Argument data type ntext is invalid for argument 1 of left function` 错误

mysql - 如何连接三个表以获得总和

oracle - 如何从 Oracle/PLSQL 中的部分创建日期时间?

sql - 寻找 SQL 中的性能改进

java - 将 XMLGregorianCalendar 转换为 Oracle 时间戳值

mysql - 明显无法正常工作

MySQL - 正则表达式搜索在找到匹配行时正常工作,否则不正常

linux - 如何在 Linux 中从 DMG 文件中获取元数据?

ffmpeg - 如何从 ffmpeg 中的流中检索 HTTP header ?