我一直在搜索数据字典表,最终在此页面中描述了“表数据字典视图”并提供了描述。
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables014.htm#ADMIN01508
那么数据字典视图和数据字典表
有什么区别请以简单的方式回答,因为我是oracle的新手,我正在使用oracle 11g。 我只是想知道是否存在差异。
答案 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
数据字典视图的主要数据源之一。数据字典表是低级的和隐秘的(大多数情况下)。数据字典视图更加友好并且易于解释。
此外,出于完整性考虑,还存在“固定数据字典表”,这不在您的问题范围内。