ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle11gr2分析函数新特性(三)

Oracle11gr2分析函数新特性(三)

原创 Linux操作系统 作者:yangtingkun 时间:2009-09-06 21:05:27 0 删除 编辑

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

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

Oracle11gr2分析函数新特性(一):http://yangtingkun.itpub.net/post/468/491115

Oracle11gr2分析函数新特性(二):http://yangtingkun.itpub.net/post/468/491137

 

 

11gr2LAGLEAD函数进行了增强,添加了IGNORE NULLS的功能。

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.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行。

LAGLEAD可以获取当前行前或后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行。

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

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行。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-614056/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10407301