找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5463

积分

0

好友

755

主题
发表于 2 小时前 | 查看: 3| 回复: 0

在 Oracle 数据库 的日常管理中,我们常常需要快速了解当前实例中有哪些表。但这个看似简单的需求,涉及的数据字典视图却不止一种。下面是一道经典的面试题,来看看你选对了吗?

问题回顾

在 Oracle 中,如何查看当前数据库的所有表?列出了四个选项:

  • A. SELECT * FROM USER_TABLES;
  • B. SHOW TABLES;
  • C. SELECT * FROM ALL_TABLES;
  • D. SELECT TABLE_NAME FROM DBA_TABLES;

这四个选项分别代表了不同的数据字典访问方式,我们逐个拆解。

选项详解

B. SHOW TABLES; – 来自另一个世界的命令

SHOW TABLES 是 MySQL 及部分内存数据库的命令,在 Oracle 中完全不可用。如果你的数据库是 Oracle,这个选项可以直接排除。

A. SELECT * FROM USER_TABLES;

USER_TABLES 是一个数据字典视图,它展示当前登录用户(即当前 Schema)所拥有的全部表。执行 SELECT * 会返回表的所有属性列,比如表空间、存储参数等。如果只关心表名,通常写:

SELECT TABLE_NAME FROM USER_TABLES;

适用场景:查看自己 Schema 下的所有表。

C. SELECT * FROM ALL_TABLES;

ALL_TABLES 的视野更广,它包含了当前用户“可以访问”的所有表,不仅有自己的表,还有别人授予你查询/修改权限的表。因此它的结果集比 USER_TABLES 更大。
适用场景:当你需要列出所有你能看懂、能操作的业务表时(包括跨 Schema 的授权表)。

D. SELECT TABLE_NAME FROM DBA_TABLES;

DBA_TABLES 是数据库管理员专属视图,它能看到整个数据库里所有用户创建的所有表。但前提是你必须具备 SELECT ANY DICTIONARYDBA 角色权限,否则会报错。
适用场景:数据库全局管理、审计、迁移前的全量盘点。

小结

这道题的出现,其实是为了考察对 Oracle 数据字典三层次视图的理解:  

  • USER_:自己的  
  • ALL_:自己能访问的  
  • DBA_:全库的(需特权)

日常开发中,使用 SELECT TABLE_NAME FROM USER_TABLES; 是最安全、最直接的方式。如果想知道自己还能操作哪些别的表,亮出 ALL_TABLES。只有在真正需要全量且拥有相应权限时,才用 DBA_TABLES

如果你对 Oracle 数据字典、SQL 调优等话题感兴趣,欢迎到 云栈社区 和更多 DBA 一起实战讨论。




上一篇:人工智能递归自我进化:AI 自主迭代更强 AI 的技术路径与现实挑战
下一篇:Bash脚本编程04:printf格式化输出命令详解与实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-13 21:17 , Processed in 0.647993 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表