如何在Oracle SQL中列出架构中的所有表?
答案 0 :(得分:195)
要查看另一个架构中的所有表,您需要具有以下一个或多个系统权限:
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'
答案 1 :(得分:63)
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
答案 2 :(得分:12)
您可以查询USER_TABLES
select TABLE_NAME from user_tables
答案 3 :(得分:4)
如果您在没有DBA权限的情况下以普通用户身份登录,则可以使用以下命令查看您自己的架构的所有表和视图。
select * from tab;
答案 4 :(得分:3)
试试这个,替换?使用您的架构名称
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
答案 5 :(得分:2)
如果您使用JDBC(Java)访问Oracle,则可以使用DatabaseMetadata类。如果您使用ADO.NET访问Oracle,则可以使用类似的方法。
如果使用ODBC访问Oracle,则可以使用SQLTables函数。
否则,如果您只需要SQLPlus或类似Oracle客户端中的信息,那么已经提到的其中一个查询就可以了。例如:
select TABLE_NAME from user_tables
答案 6 :(得分:2)
select * from user_tables;
(显示所有表格)
答案 7 :(得分:1)
select * from cat;
它将显示您的架构cat同义词user_catalog
中的所有表答案 8 :(得分:1)
select TABLE_NAME from user_tables;
上面的查询将为您提供该用户中存在的所有表的名称;
答案 9 :(得分:1)
SELECT table_name,owner FROM all_tables where owner =' schema_name'按table_name排序
答案 10 :(得分:0)
查看我的simple utility以显示有关db schema的一些信息。它基于:Reverse Engineering a Data Model Using the Oracle Data Dictionary
答案 11 :(得分:0)
如果您还需要获得表格的大小,这将非常方便:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
答案 12 :(得分:0)
OWNER
模式下所有表的表名和行计数器:
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
答案 13 :(得分:0)
如果您知道所有者名称,则可以直接运行第二个查询。
-首先,您可以选择存在的所有所有者:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
-然后您可以查看该所有者下的表格:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');