在Oracle中列出给定用户的所有表

7

我是一名Oracle新手,想要查找由用户“john”创建的所有表。

我通过以下命令行连接到Oracle数据库:

sqlplus  john/passwd

如何列出特定用户(例如john)创建的所有表?
5个回答

11

这将获取所有由“JOHN”用户拥有的表:

SELECT * FROM USER_TABLES;
或者
SELECT * FROM ALL_TABLES WHERE OWNER = 'JOHN';

([简而言之] 'JOHN' 通常需要大写。 假设用户使用 CREATE USER john ...语句创建了 john ,则 Oracle 的默认行为是将所有对象名称(即表、列、用户等)转换为大写。 当您查询数据字典时,表详细信息将以此方式存储(而不是原始命令中使用的大小写,除非您将其用双引号括起来)。)


如果John拥有任何对象表(他可能没有,因为没有人使用它们),您需要查询ALL_ALL_TABLES以获取所有内容。 - William Robertson

3

要列出表格,您可以使用

SELECT * FROM ALL_TABLES WHERE OWNER = 'JOHN';

为了查看模式的大小,您可以使用:
SELECT sum(bytes)
  FROM dba_segments
 WHERE owner = 'JOHN'

既然您已经作为模式所有者登录,您也可以使用

SELECT SUM(bytes)
  FROM user_segments

1
select * from 
USER_TABLES;

上述代码将显示当前连接的用户下所有表的信息。这可能会使您的SQL终端变得混乱。
要仅查看用户下的表名,请使用以下代码。
select table_name 
from USER_TABLES;

1

0

尝试:

select *
from all_tables
where owner = 'jhon';

非常奇怪...这是一个Oracle数据库吗?尝试:select * from user_tables; 但这样你只能看到你自己的表。 - Francesco Serra
SQL> select * from all_tables where owner= 'john'; 未选择任何行 - Rezaeimh7
很可能John没有定义任何表格!尝试使用没有任何where条件的select * from all_tables;。 - Francesco Serra
1
@m.r226 使用大写字母:'JOHN' - MT0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接