如何在Oracle SQL中列出模式中的所有表?

ben*_*rre 149 sql oracle

如何在Oracle SQL中列出模式中的所有表?

Ada*_*sch 204

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

SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
Run Code Online (Sandbox Code Playgroud)

或者是大锤子,DBA的角色.

有了这些,您可以选择:

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = '[some other schema]'
Run Code Online (Sandbox Code Playgroud)

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

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM ALL_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = '[some other schema]'
Run Code Online (Sandbox Code Playgroud)

最后,您始终可以查询自己的表的数据字典,因为您对表的权限无法撤销(截至10g):

SELECT DISTINCT OBJECT_NAME 
  FROM USER_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
Run Code Online (Sandbox Code Playgroud)

  • 除了使用`%_OBJECTS`而不是`%_TABLES`之外,"最完整的答案". (2认同)
  • 这些查询不需要不同,这是真的;然而,`owner, object_name` 在 dba_objects 中无论如何都不是唯一的;包体和包都出现在该视图中,表和索引位于不同的命名空间中。 (2认同)

Tom*_*Tom 64

SELECT table_name  from all_tables where owner = 'YOURSCHEMA';
Run Code Online (Sandbox Code Playgroud)

  • 这将仅显示YOURSCHEMA中的所有*表格,如果由YOURSCHEMA运行或由具有Adam Musch提及的特权的用户运行.否则,它只显示我们被授予特权的YOURSCHEMA中的表格. (2认同)

Sat*_*hat 13

你可以查询 USER_TABLES

select TABLE_NAME from user_tables
Run Code Online (Sandbox Code Playgroud)

  • 这是您的架构中的所有表,而不是A架构中的所有表.此外,*_TABLES数据字典视图(DBA_TABLES,ALL_TABLES,USER_TABLES)包括视图. (5认同)

小智 6

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

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

SELECT DISTINCT(owner) from SYS.ALL_TABLES;
Run Code Online (Sandbox Code Playgroud)

--然后你可以看到该所有者下面的表格:

SELECT table_name, owner from all_tables where owner like ('%XYZ%');
Run Code Online (Sandbox Code Playgroud)