ChatGPT解决这个技术问题 Extra ChatGPT

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

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


A
Adam Musch

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

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'

除了使用 %_OBJECTS 而不是 %_TABLES 之外,“最完整的答案”。
我记得在 9i 中,视图将列在 %_TABLES 中——因此,例如,尝试自动清空模式最终会导致诸如 DROP TABLE REALLY_A_VIEW CASCADE CONSTRAINTS 之类的语句抛出错误。因此,您要么必须删除带有 MINUS / NOT IN / NOT EXISTS 的视图,要么再次使用 %_OBJECTS。另外,反对 %_OBJECTS 会留下一个诱人的暗示,暗示那里可能还有什么!
查询中绝对不需要 DISTINCTowner, object_nameALL_OBJECTS 中是唯一的
这些查询不需要不同,这是真的;但是,owner, object_name 在 dba_objects 中绝不是唯一的;包体和包都出现在该视图中,表和索引位于不同的命名空间中。
最后一个查询不会像在 XE 11.2 中那样工作。似乎“user_objects”中没有“所有者”列。
T
Tom
SELECT table_name  from all_tables where owner = 'YOURSCHEMA';

如果由 YOURSCHEMA 运行或由具有 Adam Musch 提到的权限的用户运行,这只会显示 YOURSCHEMA 中的所有表。否则,它只会显示 YOURSCHEMA 中我们被授予权限的表。
S
Sathyajith Bhat

您可以查询USER_TABLES

select TABLE_NAME from user_tables

这是您的架构中的所有表,而不是 A 架构中的所有表。此外,*_TABLES 数据字典视图(DBA_TABLES、ALL_TABLES、USER_TABLES)包括视图。
将“包含视图”替换为“可以在 Oracle 的 seme 版本中包含视图”。
@Adam Musch 使用 Oracle 10g R2 测试,它没有返回视图。
K
Kermit the Frog

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

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

SELECT DISTINCT(owner) from SYS.ALL_TABLES;

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

SELECT table_name, owner from all_tables where owner like ('%XYZ%');

B
Brian Webster

如果您以没有 DBA 权限的普通用户身份登录,您可以使用以下命令查看您自己的架构的所有表和视图。

select * from tab;

A
Arsalan Sheikh
select * from cat;

它将显示您的架构中的所有表 cat 同义词 user_catalog


P
Pablo Santa Cruz

如果您使用 JDBC (Java) 访问 Oracle,您可以使用 DatabaseMetadata 类。如果您使用 ADO.NET 访问 Oracle,您可以使用类似的方法。

如果您使用 ODBC 访问 Oracle,您可以使用 SQLTables 函数。

否则,如果您只需要 SQLPlus 或类似 Oracle 客户端中的信息,那么已经提到的查询之一就可以了。例如:

select TABLE_NAME from user_tables

S
SQLMenace

试试这个,换?使用您的架构名称

select TABLE_NAME from  INFORMATION_SCHEMA.TABLES
 WHERE TABLE_SCHEMA =?
  AND TABLE_TYPE = 'BASE TABLE'

这与数据库无关,因此我认为这种类型的解决方案优于所有替代方案。我认为 INFORMATION_SCHEMA 几乎适用于我见过的所有主要数据库。尽管您可以获取的信息有些不同,但至少它是一个一致的地方。然而,通过快速的互联网搜索,似乎 Oracle 几乎是唯一一个不支持 Information_Schema 的数据库,尽管它是 SQL-92 标准的一部分。
A
A A Nayak
select TABLE_NAME from user_tables;

上面的查询将为您提供该用户中存在的所有表的名称;


P
Pirate X
select * from user_tables;

(显示所有表格)


S
Sreeju

SELECT table_name, owner FROM all_tables where owner='schema_name' order by table_name


S
SergioLeone

OWNER 架构下所有表的表名和行计数器:

SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'


M
Michał Niklas

查看我的 simple utility 以显示有关 db 架构的一些信息。它基于:Reverse Engineering a Data Model Using the Oracle Data Dictionary


V
Vijay Kumar

如果您还需要获取表格的大小,这将很方便:

select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1