oracle中的数据字典表和数据字典视图有什么区别?

时间:2019-03-05 18:43:00

标签: oracle oracle11g oracle-sqldeveloper plsqldeveloper

我一直在搜索数据字典表,最终在此页面中描述了“表数据字典视图”并提供了描述。

https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables014.htm#ADMIN01508

那么数据字典视图数据字典表

有什么区别

请以简单的方式回答,因为我是oracle的新手,我正在使用oracle 11g。 我只是想知道是否存在差异。

3 个答案:

答案 0 :(得分:1)

与所有表和视图一样,数据字典视图是从数据字典表中呈现数据的不同方法。字典表是字典数据的主要来源。同一张表可能支持多个视图。视图(在查询时即进行计算,不在数据库中存储)可能会显示来自同一表的不同数据,例如,基于查询数据的用户。

以DBA_TABLES,ALL_TABLES和USER_TABLES 视图为例。它们从一个存储的字典表中提取。但是,它们具有不同的列,不同的WHERE子句-表示不同的行集-并且ALL_TABLES和USER_TABLES将根据用户的身份显示不同的数据。

字典视图还可以在单​​个结果集中(通过连接等)显示来自多个字典表的数据,或经过处理的数据(例如聚合)—与通常在数据库中使用视图的方式没有什么不同,没有特殊之处与它们的连接就是“数据字典”视图。

编辑

我从不好奇检查DBA_TABLES视图的定义。不难发现。阅读时,我意识到我上面说的一件事是不正确的。 DBA_TABLES本身并不基于单个基本词典表;相反,它是其他几个表和视图(它们本身可能具有非平凡的定义)联接的结果。这是Oracle 12.2.0.1中FROM的视图定义的DBA_TABLES部分:

...
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.obj$ co, sys.tab$ t,
     sys."_CURRENT_EDITION_OBJ" o,
     sys.obj$ cx, sys.user$ cu, x$ksppcv ksppcv, x$ksppi ksppi,
     sys.deferred_stg$ ds, sys.imsvc$ svc
-- where
...

答案 1 :(得分:1)

三种类型的数据字典视图之间的区别是结果集。

USER_TABLES向您显示当前连接到的模式中的表。

ALL_TABLES向您显示您当前连接的用户有权访问的表。该视图还有一个附加列OWNER,用于显示拥有的架构。

DBA_TABLES向您显示数据库中的表。该视图还有一个附加列OWNER,用于显示拥有的架构。仅高级用户,例如具有DBA角色或SELECT ANY DICTIONARY特权的高级用户。

答案 2 :(得分:1)

您发布的链接将您带到标题为“表数据字典视图”的页面。

该页面上列出的所有内容都是视图,而不是表格。例如,该页面上列出的DBA_COL_COMMENTS是一个视图。 DBA_TABLES是一个视图。

在此特定页面上,所有条目都是有关数据库中表的数据字典视图 。这就是为什么页面被称为“表数据字典视图”的原因。还有另一个相似的页面,标题为“撤消数据字典视图”,列出了数据库中有关撤消的所有数据字典视图。另一页“群集数据字典视图”列出了有关数据库中群集的所有数据字典视图。

一个真正的“数据字典表”(不是您的链接显示的内容)将类似于SYS.OBJ$。此表存储有关数据库中对象的信息。它是DBA_OBJECTS数据字典视图的主要数据源之一。数据字典表是低级的和隐秘的(大多数情况下)。数据字典视图更加友好并且易于解释。

此外,出于完整性考虑,还存在“固定数据字典表”,这不在您的问题范围内。