您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

Oracle11gr2分析函数新特性(三)

 

11gr2中,Oracle分析函数的功能进一步增强。

这篇介绍分析函数LAGLEAD的增强。

 

11gr2对LAG和LEAD函数进行了增强,添加了IGNORE NULLS的功能。

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database11gEnterprise Edition Release11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> create table t (id number, name varchar2(30), type varchar2(20));

表已创建。

SQL> insert into t select rownum, object_name, object_type from dba_objects;

已创建71968行。

SQL> commit;

提交完成。

SQL> select id, name, type

  2  from t

  3  where rownum < 11;

        ID NAME                           TYPE

---------- ------------------------------ --------------------

       508 SYS_C00644                     INDEX

       509 SYS_LOB0000000528C00002$$      LOB

       510 KOTTB$                         TABLE

       511 SYS_C00645                     INDEX

       512 SYS_LOB0000000532C00002$$      LOB

       513 KOTAD$                         TABLE

       514 SYS_C00646                     INDEX

       515 SYS_LOB0000000536C00002$$      LOB

       516 KOTMD$                         TABLE

       517 SYS_C00647                     INDEX

已选择10行。

LAG和LEAD可以获取当前行前或后N行的记录:

SQL> select id,

  2  name,

  3  type,

  4  lag(name) over(order by id) n_name,

  5  lead(name) over(order by id) l_name

  6  from t

  7  where rownum < 11;

 ID NAME                      TYPE   N_NAME                    L_NAME

--- ------------------------- ------ ------------------------- -------------------------

508 SYS_C00644                INDEX                            SYS_LOB0000000528C00002$$

509 SYS_LOB0000000528C00002$$ LOB    SYS_C00644                KOTTB$

510 KOTTB$                    TABLE  SYS_LOB0000000528C00002$$ SYS_C00645

511 SYS_C00645                INDEX  KOTTB$                    SYS_LOB0000000532C00002$$

512 SYS_LOB0000000532C00002$$ LOB    SYS_C00645                KOTAD$

513 KOTAD$                    TABLE  SYS_LOB0000000532C00002$$ SYS_C00646

514 SYS_C00646                INDEX  KOTAD$                    SYS_LOB0000000536C00002$$

515 SYS_LOB0000000536C00002$$ LOB    SYS_C00646                KOTMD$

516 KOTMD$                    TABLE  SYS_LOB0000000536C00002$$ SYS_C00647

517 SYS_C00647                INDEX  KOTMD$

已选择10行。

如果LAG或LEAD的表达式结果为空,则返回结果也是空:

SQL> select id,

  2  name,

  3  type,

  4  lag(decode(type, 'LOB', null, name)) over(order by id) n_name,

  5  lead(decode(type, 'LOB', null, name)) over(order by id) l_name

  6  from t

  7  where rownum < 11;

        ID NAME                      TYPE   N_NAME                    L_NAME

---------- ------------------------- ------ ------------------------- ----------------------

       508 SYS_C00644                INDEX

       509 SYS_LOB0000000528C00002$$ LOB    SYS_C00644                KOTTB$

       510 KOTTB$                    TABLE                            SYS_C00645

       511 SYS_C00645                INDEX  KOTTB$

       512 SYS_LOB0000000532C00002$$ LOB    SYS_C00645                KOTAD$

       513 KOTAD$                    TABLE                            SYS_C00646

       514 SYS_C00646                INDEX  KOTAD$

       515 SYS_LOB0000000536C00002$$ LOB    SYS_C00646                KOTMD$

       516 KOTMD$                    TABLE                            SYS_C00647

       517 SYS_C00647                INDEX  KOTMD$

已选择10行。

而新增的IGNORE NULLS功能,可以忽略NULL结果,去寻找另一个满足条件的结果:

SQL> select id,

  2  name,

  3  type,

  4  lag(decode(type, 'LOB', null, name)) ignore nulls over(order by id) n_name,

  5  lead(decode(type, 'LOB', null, name)) ignore nulls over(order by id) l_name 

  6  from t

  7  where rownum < 11;

        ID NAME                      TYPE   N_NAME                    L_NAME

---------- ------------------------- ------ ------------------------- ----------------------

       508 SYS_C00644                INDEX                            KOTTB$

       509 SYS_LOB0000000528C00002$$ LOB    SYS_C00644                KOTTB$

       510 KOTTB$                    TABLE  SYS_C00644                SYS_C00645

       511 SYS_C00645                INDEX  KOTTB$                    KOTAD$

       512 SYS_LOB0000000532C00002$$ LOB    SYS_C00645                KOTAD$

       513 KOTAD$                    TABLE  SYS_C00645                SYS_C00646

       514 SYS_C00646                INDEX  KOTAD$                    KOTMD$

       515 SYS_LOB0000000536C00002$$ LOB    SYS_C00646                KOTMD$

       516 KOTMD$                    TABLE  SYS_C00646                SYS_C00647

       517 SYS_C00647                INDEX  KOTMD$

已选择10行。

 

 

(以上内容摘于网络,如有侵权,请告之,将第一时间删除)

相关文章 [上一篇] Oracle11gr2分析函数新特性(二)
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号