Answers:
要查看另一模式中的所有表,您需要具有以下一个或多个系统特权:
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'
DISTINCT
在查询中绝对不需要。owner, object_name
是唯一的ALL_OBJECTS
owner, object_name
在dba_objects中无论如何都不是唯一的;包主体和包都出现在该视图中,表和索引位于不同的命名空间中。
您可以查询 USER_TABLES
select TABLE_NAME from user_tables
试试这个,替换吗?与您的架构名称
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
如果要通过JDBC(Java)访问Oracle,则可以使用DatabaseMetadata类。如果要通过ADO.NET访问Oracle,则可以使用类似的方法。
如果要通过ODBC访问Oracle,则可以使用SQLTables函数。
否则,如果您只需要SQLPlus或类似的Oracle客户端中的信息,则已经提到的查询之一将起作用。例如:
select TABLE_NAME from user_tables
select * from cat;
它将显示您的架构猫user_catalog的同义词中的所有表
查看我的简单实用程序,以显示有关数据库架构的一些信息。它基于:使用Oracle数据字典对数据模型进行逆向工程
如果还需要获取表的大小,这将很方便:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
%_OBJECTS
代替以外,“最完整的答案”%_TABLES
。