sql - 获取Oracle中所有表的列表?

标签 sql oracle

如何查询 Oracle 数据库以显示其中所有表的名称?

最佳答案

SELECT owner, table_name
  FROM dba_tables

这是假设您有权访问 DBA_TABLES数据字典 View 。如果您没有这些权限但需要它们,您可以请求 DBA 显式授予您对该表的权限,或者 DBA 授予您 SELECT ANY DICTIONARY特权或 SELECT_CATALOG_ROLE角色(其中任何一个都允许您查询任何数据字典表)。当然,您可能想要排除某些模式,例如 SYSSYSTEM其中包含大量您可能不关心的 Oracle 表。

或者,如果您无权访问DBA_TABLES ,您可以通过ALL_TABLES看到您的账户有权访问的所有表。查看:

SELECT owner, table_name
  FROM all_tables

尽管如此,这可能是数据库中可用表的子集( ALL_TABLES 显示您的用户已被授予访问权限的所有表的信息)。

如果您只关心您拥有的表,而不是您有权访问的表,则可以使用 USER_TABLES :

SELECT table_name
  FROM user_tables

USER_TABLES仅包含有关您拥有的表的信息,它没有 OWNER列 – 根据定义,所有者就是您。

Oracle 还有许多遗留数据字典 View -- TAB , DICT , TABS ,和CAT例如——可以使用。一般来说,我不建议使用这些旧 View ,除非您绝对需要将脚本向后移植到 Oracle 6。Oracle 很长一段时间没有更改这些 View ,因此它们在处理较新类型的对象时经常会出现问题。例如,TABCAT View 都显示有关用户回收站中的表的信息,而 [DBA|ALL|USER]_TABLES View 全部将其过滤掉。 CAT还显示有关物化 View 日志的信息 TABLE_TYPE “TABLE”的内容不太可能是您真正想要的。 DICT结合了表和同义词,并且不会告诉您谁拥有该对象。

关于sql - 获取Oracle中所有表的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/205736/

相关文章:

sql - 计算每个客户订单之间的平均时间

oracle - 如何从存储过程返回空游标?

java - DBMS_RANDOM 似乎不起作用

c - OCIDate 在进入 Oracle 的过程中被破坏

php - 如何在 CakePHP 中编写带子查询的 Select

mysql - sql中查找不同表中的同一列

php - MySQL 使用动态变量连接两个表

c# - 如何使用 OracleClientFactory 将超过 4000 个字符插入到 XmlType 中?

mysql - 无法删除最大用户连接数

SQL,根据分组选择的最小值从第二个表中获取值