【问题标题】:Oracle database schema [closed]Oracle 数据库架构 [关闭]
【发布时间】:2020-05-24 00:59:17
【问题描述】:

如何获取 Oracle 数据库架构?如何获取这些表中的所有表名和列以及任何外键?

【问题讨论】:

标签: sql oracle schema


【解决方案1】:

如何获取所有表名

您在这里问了很多问题,但这适用于架构中的表:

SELECT *
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = 'SCHEMA_NAME'

这也可以:

SELECT *
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE';

但它会返回很多你不想看到的系统和系统拥有的表名,我认为......或者你呢?你的问题不是很清楚...

在名为OBJECT_NAME 的列中是表的名称:

SELECT OBJECT_NAME
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE';

还有外键吗?

我在这里找到了这个很棒的查询: List of foreign keys and the tables they reference

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 c.constraint_type = 'R'
AND a.table_name = 'YOUR_TABLE_NAME';

我相信您现在知道什么是交易以及如何找到您需要的其他东西。请转到我在这里提到的链接并在这里研究其他答案...

注意

如果您有任何机会没有从您的查询中获得任何结果,请确保您已输入大写字母的表/模式/.../对象名称,如下所示:

AND a.table_name = 'YOUR_TABLE_NAME';
AND OWNER = 'SCHEMA_NAME'

或者,如果您不想考虑它,您可以将它们全部转换为大写字母字符串与UPPER

AND UPPER(OWNER) = UPPER('SCHEMA_NAME')

【讨论】:

  • WHERE OBJECT_TYPE = 'YOUR_TABLE_NAME' ... 看起来是一个错字。
  • @MatthewMcPeak 非常感谢。在两个地方:)
  • 嗨@user12853430,不客气。你能把答案标记为正确吗?
猜你喜欢
  • 2015-12-28
  • 2012-04-14
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 2012-12-11
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多