关于inline view内嵌视图的学习

看一篇的时候碰巧看到有关inline view的概念,不太熟悉,查了下。

所谓inline view,也叫内前视图,说白了,就是执行的时候才建立的视图。例如select ... from (select ... from (select ...)),这里作为from表来使用的select语句创建的就是一个内嵌视图,个人理解,之所以叫内嵌,就是因为它是放在一个语句中的,而且可以多次嵌套,但这种内嵌视图只能在当前的SQL中使用,不能像CREATE VIEW创建的视图那样重复使用,不是一个实际存在的对象。

再来看看Concept中对它的定义:

Inline Views
An inline view is not a schema object. It is a subquery with an alias (correlation name) that you can use like a view within a SQL statement.

感觉它就是一个SQL的使用技巧,可以让你不用CREATE VIEW显示创建一个视图,不用维护它,只需要在SQL中使用嵌套,就可以使用视图封装查询结果的特性。

再看看MOS上有什么关于inline view的介绍。找到一个SELECT With An INLINE VIEW Fails With ORA-600 [9999] (文档 ID 1068871.1),指出在11.1.0.7存在一个bug。

The query
---------
select count(*)
  from (select count(*) as numLLEids
          from LaborLevelEntry 
          where ((upper(NAME) = upper( N'Division2')
                AND LABORLEVELDEFID = 1 AND inActive=0)
                OR (upper(NAME) = upper( N'Department999999')
                AND LABORLEVELDEFID = 2 AND inActive=0))
          group by laborleveldefid) numrows ;

11.1.0.6: (good results)

  COUNT(*)
----------
        2

11.1.0.7: (wrong results)

  COUNT(*)
----------
         1
         1

Disabling view merging in 11.1.0.7 we got the good results.

这个问题主要是在这个版本的Oracle中,使用上面的inline view查询的结果是分组的样式,关闭隐含参数_simple_view_merging可以得到正确结果,或者给该版本打一个补丁Patch 8327137也行。

找了一个10g的库,看到_simple_view_merging隐含参数是TRUE,该参数是默认打开的。

(正如白鳝所说,这种从不同参考抓到的知识点,往往只是独立的,如果能关联起来那就最好了,这里仅此留个记处,希望未来能用到)。

另外,这篇博文(http://hi.baidu.com/optical/item/cfc7c0ea0d94d8e2fb42ba5d)中提到内嵌视图与子查询(subquery)的区别:

subquery (sub-query) is a SELECT statement in the WHERE- or HAVING-clause of another SELECT statement.

Example subqueries:

Subquery executes first and feeds output into the main query:

SELECT ename, deptno
  FROM emp
 WHERE deptno = (SELECT deptno
                   FROM emp
                  WHERE ename = 'TAYLOR');
Correlated subquery (both executes simultaneously):

SELECT ename, deptno, sal
  FROM emp x
  WHERE sal > (SELECT AVG(sal)
        FROM emp
        WHERE emp.deptno = x.deptno)
  ORDER BY deptno;

时间: 2024-09-21 23:23:39

关于inline view内嵌视图的学习的相关文章

android- 关于自定义可水平滑动的view内嵌scrollview的问题

问题描述 关于自定义可水平滑动的view内嵌scrollview的问题 我做的是pad端,界面外层是一个自定义的可滑动的界面.左边是一个listview,右边是一个scrollview用来显示左边listview各个item的数据.我想要的效果是他俩各占据屏幕的一半,我向左滑动界面listview隐藏,scrollview会全部显示,反之同理.但是我发现水平滑动scrollview没反应,我应该怎么做使横行滑动scrollview的时候能执行自定义的view水平滑动事件. 解决方案 http:/

Android学习之——如何将GridView内嵌在ScrollView中

      最近在做一个项目,有一个需求是在ScrollView中内嵌一个GridView.       刚开始,我是以为能直接内嵌在里面: 1 <ScrollView 2 android:layout_width="match_parent" 3 android:layout_height="0dp" 4 android:layout_weight="5.5"> 5 <GridView 6 android:id="@

iOS开发之tableView点击下拉扩展与内嵌collectionView上传图片效果_IOS

废话不多说了,直奔主题. //需要的效果 1.设置window的根视图控制器为一个UITableViewController #import "AppDelegate.h" #import "YCTableViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFin

内嵌汇编与C/C++实现的冒泡排序,快速排序算法排序500W个数据对比

内嵌汇编是微软为了提高程序的直接操作硬件能力,以及实现大任务程序效率的提高,而嵌入在VC中的,他不依赖于汇编器对内嵌汇编代码进行汇编,这些内嵌汇编代码由C编译器内部实现,可以使程序好像自陷到汇编状态一样.这意味着你如果在C/C++程序中使用了 inline  asm进行 汇编 那么 就注定无法跨平台的,对于没有汇编基础的同学是需要去学习下王爽的8086汇编程序设计.,因为有些时候C++程序员是不得不懂这些东西的 ,否则你永远无法知道编译器为你的函数做了什么,.你还有哪些地方需要优化, 不管处于什

内嵌或嵌入SQL和存储过程之对比

存储过程 问:为什么我的内嵌SQL或嵌入SQL 要比我的存储过程运行的快? 答:重编译可能是存储过程运行比较慢的原因.要确认这一点,您需要做一些性能测试,例如:看一下每种类型的查询和调用存储过程的"showplan"情况,并比较查询计划的高速缓存命中率和高速缓存缺失率.您还可以试着在存储过程内部为引用表.视图和过程写出对象拥有者.如下面例子所示: SELECT * FROM dbo.mytable 这样有助于您重新使用计划并防止高速缓存缺失.

gcc对C语言的扩展:语句内嵌表达式(statement-embedded expression)

在gnu c 中,用括号将复合语句括起来也形成了表达式.他允许你在一个表达式内使用循环,跳转和局部变量. 一个复合语句是用大括号{}括起来的一组语句.在包含语句的表达式这种结构中,再用括号( )将大括号括起来,例如: ({ int y = foo (); int z; if (y > 0) z = y; else z = - y; z; }) 就是一个合法表达式,用于计算foo( )函数返回值的绝对值. 在上面的复合语句中,最后的一句必须是一个以分号结尾的表达式.这个表达式代表了整个结构的值.如

.NET发送内嵌图片邮件的正确方法

很多企业发出的邮件都是图文并茂的,其中有部分是在邮件中引用网上的图片网址,更专业些的方法是直接在邮件中通过内联附件内嵌图片,这个功能可以由一些邮件客户端程序实现,那么我们怎么在.Net中实现这一功能呢? 搜索了一下,找到了一位,但这个方法经我验证是错误的,其他就没找到什么有用的资料了. 经过尝试,我找到了正确的方法,而且非常简单: 1.设置附件的ContentId属性为一个自定义名称. 2.设置附件的ContentDisposition.Inline属性为true. 3.在邮件的HTML格式正文

OCP1z0-047 : 表连接――内联视图当作表使用

用sys用户登录,给oe用户授权dba,以便可以用oe用户查看执行计划: oe@OCM> conn / as sysdba Connected. sys@OCM> grant dba to oe; Grant succeeded. sys@OCM> conn oe/oe Connected. oe@OCM> set autot traceonly; oe@OCM> SELECT p.product_name,i.item_cnt 2 FROM (SELECT product_

采用Cloudera-Manager安装CDH时,采用内嵌数据库各数据库用户密码的保存位置

一.场景描述     在采用Cloudera-Manager安装cdh时,通常使用内嵌的PostgreSQL数据库.     Cloudera-Manager除了保存CDH集群的配置元数据的scm数据库外,还为Activity Monitor(活动监控).Service Monitor(服务监控).Report Manager(报告管理).Host Monitor(主机监控).Cloudera Navigator(Cloudera导航)等信息分别创建数据amon.smon.rmon.hmon.n