如何在 Oracle SQL 中列出架构中的所有表?

如何在 Oracle SQL 中列出架构中的所有表?

733454 次浏览

可以查询 USER_TABLES

select TABLE_NAME from user_tables

尝试使用模式名替换?

select TABLE_NAME from  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'

请查看我的 简单的实用工具以显示关于 db 模式的一些信息。它是基于一个数据模型的逆向工程 使用 Oracle 数据字典

SELECT table_name  from all_tables where owner = 'YOURSCHEMA';

如果使用 JDBC (Java)访问 Oracle,则可以使用 DatabaseMetadata类。如果使用 ADO.NET 访问 Oracle,则可以使用类似的方法。

如果使用 ODBC 访问 Oracle,则可以使用 SQLTables函数。

否则,如果只需要 SQLPlus 或类似 Oracle 客户机中的信息,那么可以使用前面提到的查询之一。例如:

select TABLE_NAME from user_tables

要查看另一个架构中的所有表,您需要具有以下一个或多个系统特权:

SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE

或者大锤,DBA 的角色。

有了这些选项,你可以选择:

SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'

如果没有这些系统特权,您只能看到被授予某种级别访问权限的表,无论是直接访问还是通过角色访问。

SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'

最后,您总是可以为您自己的表查询数据字典,因为您对表的权限不能被撤销(从10g 开始) :

SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'

如果您在没有 DBA 权限的情况下作为 Normal User 登录,则可以使用以下命令查看自己的模式的所有表和视图。

select * from tab;
select * from cat;

它将显示 user _ alog 的模式 cat 同义词中的所有表

select TABLE_NAME from user_tables;

以上查询将给出该用户中所有表的名称;

select * from user_tables;

(显示所有表格)

如果你还需要知道桌子的大小,这个会很方便:

select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1

SELECT table _ name,owner FROM all _ tables where owner = ‘ schema _ name’order by table _ name

OWNER架构下所有表的表名和行计数器:

SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'

如果知道所有者名称,则可以直接运行第二个查询。

--首先,你可以选择存在的所有所有者:

SELECT DISTINCT(owner) from SYS.ALL_TABLES;

——然后你可以看到那个主人下面的桌子:

SELECT table_name, owner from all_tables where owner like ('%XYZ%');