【发布时间】:2020-05-24 00:59:17
【问题描述】:
如何获取 Oracle 数据库架构?如何获取这些表中的所有表名和列以及任何外键?
【问题讨论】:
-
嗨@user12853430 检查这个:stackoverflow.com/help/someone-answers
如何获取 Oracle 数据库架构?如何获取这些表中的所有表名和列以及任何外键?
【问题讨论】:
如何获取所有表名
您在这里问了很多问题,但这适用于架构中的表:
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' ... 看起来是一个错字。