如何在Oracle SQL中列出模式中的所有表?
如果使用JDBC(Java)访问Oracle,则可以使用DatabaseMetadata类 . 如果您使用ADO.NET访问Oracle,则可以使用类似的方法 .
如果使用ODBC访问Oracle,则可以使用SQLTables函数 .
否则,如果您只需要SQLPlus或类似Oracle客户端中的信息,那么已经提到的其中一个查询就可以了 . 例如:
select TABLE_NAME from user_tables
select * from user_tables;
(显示所有表格)
select * from cat;
它将显示您的schema cat同义词user_catalog中的所有表
SELECT table_name,owner FROM all_tables其中owner ='schema_name'按table_name排序
查看我的simple utility以显示有关db schema的一些信息 . 它基于:Reverse Engineering a Data Model Using the Oracle Data Dictionary
select TABLE_NAME from user_tables;
上面的查询将为您提供该用户中存在的所有表的名称;
如果你还需要获得表格的大小,这将是很方便的:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
OWNER schema下所有表的表和行计数器的名称:
OWNER
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
要查看另一个模式中的所有表,您需要具有以下一个或多个系统特权:
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'
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
你可以查询 USER_TABLES
USER_TABLES
如果以没有DBA权限的普通用户身份登录,则可以使用以下命令查看自己的架构的所有表和视图 .
select * from tab;
试试这个,换掉?使用您的架构名称
select TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA =? AND TABLE_TYPE = 'BASE TABLE'
13 回答
如果使用JDBC(Java)访问Oracle,则可以使用DatabaseMetadata类 . 如果您使用ADO.NET访问Oracle,则可以使用类似的方法 .
如果使用ODBC访问Oracle,则可以使用SQLTables函数 .
否则,如果您只需要SQLPlus或类似Oracle客户端中的信息,那么已经提到的其中一个查询就可以了 . 例如:
(显示所有表格)
它将显示您的schema cat同义词user_catalog中的所有表
SELECT table_name,owner FROM all_tables其中owner ='schema_name'按table_name排序
查看我的simple utility以显示有关db schema的一些信息 . 它基于:Reverse Engineering a Data Model Using the Oracle Data Dictionary
上面的查询将为您提供该用户中存在的所有表的名称;
如果你还需要获得表格的大小,这将是很方便的:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
OWNER
schema下所有表的表和行计数器的名称:SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
要查看另一个模式中的所有表,您需要具有以下一个或多个系统特权:
或者是大锤子,DBA的角色 .
有了这些,你可以选择:
如果没有这些系统权限,您只能看到已被授予某种级别访问权限的表,无论是直接访问还是通过角色 .
最后,您始终可以查询自己的表的数据字典,因为您对表的权限无法撤销(从10g开始):
你可以查询
USER_TABLES
如果以没有DBA权限的普通用户身份登录,则可以使用以下命令查看自己的架构的所有表和视图 .
试试这个,换掉?使用您的架构名称