一尘不染

功能未实现:WINDOW / ORDER BY

sql

我正在使用嵌入式Apache Derby数据库并执行以下查询:

SELECT 
    someUniqueValue, 
    row_number() over(ORDER BY someUniqueValue) as ROWID 
FROM 
    myTable;

someUniqueValue 是一个varchar。

我收到异常:

java.sql.SQLFeatureNotSupportedException:未实现的功能:WINDOW / ORDER BY

如果我将row_number()查询中的行更改为:

row_number() over() as ROWID

查询运行正常(尽管结果对我来说毫无用处)。

Derby文档指出此功能受支持。我究竟做错了什么?


阅读 176

收藏
2021-03-08

共1个答案

一尘不染

您发布的链接只是一个草稿,用于指定应如何实现该功能。

如果向下滚动,您会发现:

从10.4.1.3版本开始,Derby中包括ROW_NUMBER()窗口函数的实现。 限制和用法说明可在《 Derby参考手册》中找到

然后,当您查看Derby手册(您的链接不是手册)http://db.apache.org/derby/docs/10.10/ref/rreffuncrownumber.html时,您会发现一些限制:

  • Derby当前不允许在OVER()子句中指定已命名或未命名的窗口规范,但是需要使用空括号。这意味着将在整个结果集中对函数进行评估。
  • ROW_NUMBER函数当前无法在WHERE子句中使用。
  • Derby当前在子查询中不支持ORDER BY,因此当前无法保证SELECT子查询中的行顺序。如果有严格的要求,则可以使用优化程序替代来强制优化程序使用在所需列上排序的索引。
2021-03-08