奇怪的 Hibernate 生成的 SQL 带有 OVER() 函数和 ORDER BY ORDER ON

strange Hibernate-generated SQL with OVER() function and ORDER BY ORDER ON

我在遗留 Web 应用程序中遇到了轻微的排序异常问题,我想我应该从 Hibernate 使用 DB2Dialect 生成的后端 SQL 查询开始:

FROM   (SELECT inner2_.*,
           ROWNUMBER()
             OVER(
               ORDER BY ORDER OF inner2_) AS rownumber_
    FROM   (SELECT this_.sohn                       AS SOHN1_15_11_,
                   this_.aslc                       AS ASLC2_15_11_,
                   this_.cc                         AS CC3_15_11_,
                   bb1_.sbn                         AS SBN1_2_0_,
                   bb1_.abc                         AS ABC3_4_5_,
                   mh2_.smhn                        AS SMHN1_9_1_,
                   mh2_.sabc                        AS SABC3_4_6_,
                   og8_.sogn                        AS SOGN1_11_2_,
                   og8_.sogo                        AS SOGO3_4_7_,
                   oc9_.socn                        AS SOCN_1_13_3_,
                   oc9_.soco                        AS SOCO_3_4_8_
            FROM   ott.oh this_
                   INNER JOIN ott.bb1_
                           ON this_.sbn = bb1_.sbn
                   INNER JOIN ott.mh2_
                           ON this_.smhn = mh2_.smhn
                   LEFT OUTER JOIN ott.og og8_
                                ON this_.sogn = og8_.sogn
                   LEFT OUTER JOIN ott.oc oc9_
                                ON this_.socn = oc9_.socn
            WHERE  ( 1 = 1 )
                   AND bb1_.sbn = ?
                   AND mh2_.smhn = ?
            FETCH first 200 ROWS only) AS inner2_) AS inner1_
WHERE  rownumber_ > 190
ORDER  BY rownumber_

这个查询有什么作用?我特别好奇 OVER(),当我 google 这样的 SQL 函数时,它不会出现(但它是一个 MDX 函数?)。

此查询在应用程序中的作用是抓取分页列表的最后一页,该列表按甚至未出现在查询中的字段排序。初始加载时填充第一页的查询不同,其生成的 SQL 对所需字段进行 ORDER BY。

因此,为了解决这个问题,我需要了解查询的功能。接受者?

OVER() 是所谓的 OLAP 函数的一部分 - 可以在 DB2 SQL Cookbook 中找到一个很好的描述 - 即在这里可用:

http://www.ids-system.de/images/Downloads/DB2V97CK.PDF

一组非常实用的功能

还有很好的额外内容

http://www.ibm.com/developerworks/data/library/techarticle/dm-0401kuznetsov/