要查看另一个模式中的所有表,您需要具有以下一项或多项系统权限:
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
select TABLE_NAME from user_tables
如果您知道所有者名称,则可以直接运行第二个查询。
--首先您可以选择所有存在的所有者:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
--然后您可以看到该所有者下的表格:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
如果您以没有 DBA 权限的普通用户身份登录,您可以使用以下命令查看您自己的架构的所有表和视图。
select * from tab;
select * from cat;
它将显示您的架构中的所有表 cat 同义词 user_catalog
如果您使用 JDBC (Java) 访问 Oracle,您可以使用 DatabaseMetadata 类。如果您使用 ADO.NET 访问 Oracle,您可以使用类似的方法。
如果您使用 ODBC 访问 Oracle,您可以使用 SQLTables 函数。
否则,如果您只需要 SQLPlus 或类似 Oracle 客户端中的信息,那么已经提到的查询之一就可以了。例如:
select TABLE_NAME from user_tables
试试这个,换?使用您的架构名称
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
select TABLE_NAME from user_tables;
上面的查询将为您提供该用户中存在的所有表的名称;
select * from user_tables;
(显示所有表格)
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'
查看我的 simple utility 以显示有关 db 架构的一些信息。它基于: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
%_OBJECTS
而不是%_TABLES
之外,“最完整的答案”。DISTINCT
。owner, object_name
在ALL_OBJECTS
中是唯一的owner, object_name
在 dba_objects 中绝不是唯一的;包体和包都出现在该视图中,表和索引位于不同的命名空间中。