love wife & love life —Roger的Oracle&MySQL技术博客

Phone:18180207355 提供专业Oracle&MySQL数据恢复、性能优化、迁移升级、紧急救援等服务

Oracle 12c学习系列之—Row limits & Invisible Column

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger的Oracle&MySQL技术博客

本文链接地址: Oracle 12c学习系列之—Row limits & Invisible Column

Oracle 12c 引入了row limits的特性,玩Mysql的人都知道这个,然而Oracle却一直没有这个功能,不过在12c中终于实现了。

而且你还可以查询其中的某几行数据,例如我想查询第100-110 行数据。

注意,它这里的offset是根据行号(rownum来的)。如果你这样觉得不明白,这样查询就明白了,如下:

除了前面fetch和offset用法之外,还有一个percent选项,如下:

我们可以返回指定比例的数据,注意,Oracle这里是取整的,而且不是四舍五入的原则。

可以清楚的看到Oracle的过程,其实是进行了一个复杂的filter操作。

+++++++++ Invisible column +++++++++++++

在Oracle 11g版本中,引入了invisible Index特性,在12c中更进一步,可以让column也不可见,即invisible column特性。

可以看到,当column被修改为invisible(不可见)之后,你desc都无法查看该column的信息,当然select查询也不会返回该列的数据。

当column被设置为invisible 之后,不代表该列的数据就变化了,我们仍然可以进行insert操作。

这里我比较好奇Oracle是在怎么来实现的,想想也应该是通过修改数据字典col$的某个字典属性来实现,检查发现果然是这样的。

Oracle 12c 版本中col$ 数据字典表的结构和column名称的解释如下:

大家注意看其中的 property 列的属性,可以发现其中有hidden column的说明,这显然就是invisible的意思。
下面我们可以通过查询来观察下其变化:

可以看到,我们的猜测是没错的,如果你通dbms_metadata去获取table的定义,其实也能发现对于隐藏列Oracle加了一个invisible关键字:

后面有空还会继续研究和分享Oracle 12c的其他内容,这仅仅是个开始!

Leave a Reply

You must be logged in to post a comment.