[2016026]12c lateral语法.txt

[2016026]12c lateral语法.txt

12c 支持一种LATERAL的写法,例子:

SELECT e1.*, e3.avg_sal
  FROM scott.emp e1
      ,LATERAL (SELECT AVG (e2.sal) avg_sal
                  FROM scott.emp e2
                 WHERE e1.deptno != e2.deptno) e3;

-- 显示emp每行,同时显示其它不是本部门的平均薪水.我当时看到以上语句我想到如果不这样写,我个人并喜欢ansi的语法,
-- 但是像上面的语句,如果要写以前11g下的语法,该如何写呢?

-- 自己一下子也想不出来.看看10053跟踪:

alter session set events '10053 trace name context forever, level 12';
SELECT e1.*, e3.avg_sal
  FROM scott.emp e1
      ,LATERAL (SELECT AVG (e2.sal) avg_sal
                  FROM scott.emp e2
                 WHERE e1.deptno != e2.deptno) E3;
alter session set events '10053 trace name context off';

PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  71hna731k6dk7, child number 0
-------------------------------------
SELECT e1.*, e3.avg_sal   FROM scott.emp e1       ,LATERAL (SELECT AVG
(e2.sal) avg_sal                   FROM scott.emp e2
WHERE e1.deptno != e2.deptno) E3

Plan hash value: 4262987483

-----------------------------------------------------------------------------------------
| Id  | Operation            | Name            | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
-----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                 |        |       |    45 (100)|          |
|   1 |  NESTED LOOPS        |                 |     14 |   714 |    45   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL  | EMP             |     14 |   532 |     3   (0)| 00:00:01 |
|   3 |   VIEW               | VW_LAT_A18161FF |      1 |    13 |     3   (0)| 00:00:01 |
|   4 |    SORT AGGREGATE    |                 |      1 |     7 |            |          |
|*  5 |     TABLE ACCESS FULL| EMP             |      9 |    63 |     3   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1
   2 - SEL$1 / E1@SEL$1
   3 - SEL$2 / E3@SEL$1
   4 - SEL$2
   5 - SEL$2 / E2@SEL$2

Predicate Information (identified by operation id):
---------------------------------------------------

   5 - filter("E1"."DEPTNO"<>"E2"."DEPTNO")

--查看10053跟踪:
Final query after transformations:******* UNPARSED QUERY IS *******
SELECT "E1"."EMPNO" "EMPNO","E1"."ENAME" "ENAME","E1"."JOB" "JOB","E1"."MGR" "MGR","E1"."HIREDATE" "HIREDATE","E1"."SAL" "SAL","E1"."COMM"
       "COMM","E1"."DEPTNO" "DEPTNO","VW_LAT_A18161FF"."AVG_SAL_0" "AVG_SAL"
  FROM "SCOTT"."EMP" "E1", LATERAL( (
        SELECT AVG("E2"."SAL") "AVG_SAL_0"
          FROM "SCOTT"."EMP" "E2"
 WHERE "E1"."DEPTNO" <> "E2"."DEPTNO")) "VW_LAT_A18161FF";

--看来这种语法不好转换.我举上面的例子实际上许多sql语句oracle最终转换oracle为(+)的语法的.可以看看我以前的例子:
http://blog.itpub.net/267265/viewspace-1593068/

时间: 2024-07-30 13:28:14

[2016026]12c lateral语法.txt的相关文章

[20160213]关于ansi语法.txt

[20160213]关于ansi语法.txt --曾经写过几篇关于ansi语法的blog,参考链接: [20120410]使用ANSI join syntax好吗?.txt http://blog.itpub.net/267265/viewspace-720875/ [20150423]left right join.txt http://blog.itpub.net/267265/viewspace-1593068/ --我以前并不是学习计算机,我一开始学习连接就非常不习惯写left join

[20170625]12c Extended statistics.txt

[20170625]12c Extended statistics.txt --//别人的系统12c,awr报表出现大量调用执行如下sql语句. select default$ from col$ where rowid=:1; --//google看了一下,问题出在Extended statistics的问题,12c 会自动收集扩展统计信息.找到如下链接: --//https://blog.dbi-services.com/sql-plan-directives-strike-again/ 1

[20160910]12c sqlldr express.txt

[20160910]12c sqlldr express.txt --Oracle 12c introduces Sql*Loader Express features, which allow users to run sqlldr with minimum configuration.   --通过例子来说明: SCOTT@test01p> @ ver1 PORT_STRING                    VERSION        BANNER                 

[20130809]12c Clustering Factor.txt

[20130809]12c Clustering Factor.txt 以前在11G以前,如果使用assm,表的CF经常会很大,即使你插入的像顺序号这样的字段,由于多个会话同时操作,插入的数据分布的不同的块中,以顺序号为索引的CF也会变得很大,甚至接近记录的数量.这个在<基于成本的优化>里面也有介绍. 但是在12g可以设置一个参数改善这种情况,做一些测试看看. 参考了Richard Foote大师的blog:http://richardfoote.wordpress.com/2013/05/0

[20130721]ORACLE 12C Invisible Columns.txt

[20130721]ORACLE 12C Invisible Columns.txt 在ORACLE 12C中有了Invisible Columns的概念,就是在表中真实的存在该列,但是通过设置Invisible可以实现不显示该列.自己测试看看. SQL> select banner from v$version ; BANNER -------------------------------------------------------------------------------- Or

[20131221]12c 优化 bug.txt

[20131221]12c 优化 bug.txt http://connormcdonald.wordpress.com/2013/12/20/the-challenge-of-optimization/ --仅仅自己重复测试看看! @ver BANNER                                                                               CON_ID ------------------------------------

[20130909]12C执行计划的TABLE ACCESS BY INDEX ROWID BATCHED.txt

[20130909]12C执行计划的TABLE ACCESS BY INDEX ROWID BATCHED.txt 在写[20130809]12c Clustering Factor.txt,链接 提到执行计划里面存在TABLE ACCESS BY INDEX ROWID BATCHED,这里的BATCHED表示什么? 自己不是很清楚. 既然多了一个batched,一定与原来的不同,具体含义是什么呢?做一些简单的探究: 1.建立测试环境: SCOTT@test01p> @ver BANNER  

[20160809]exp语法问题.txt

[20160809]exp语法问题.txt http://blog.itpub.net/267265/viewspace-2122890/ --一开始以为上面的语法是shell有关.测试一下在windows的情况,如果windows下没有问题,这个应该是exp内部的一个功能. --可以一边传一边压缩. 1.环境: SCOTT@test01p> @ ver1 PORT_STRING                    VERSION        BANNER                  

[20170620]11G 12c expand sql text.txt

[20170620]11G 12c expand sql text.txt --//原来写的脚本只能分别在11g,12c单独使用.上午花一点点时间.把两者整合起来. --//讨论链接:http://www.itpub.net/thread-2088981-1-1.html --//再次感谢solomon_007的指点: set long 20000 set serveroutput on declare     L_sqltext clob := null;     l_version varc