2014-01-24 24 views
3

我使用的是嵌入式Apache Derby数据库,并执行以下查询:功能没有实现:WINDOW/ORDER BY

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

someUniqueValue是一个varchar。

我得到异常:

java.sql.SQLFeatureNotSupportedException:未实现功能:窗口/ ORDER BY

如果我在查询更改row_number()行:

row_number() over() as ROWID 

查询运行良好(虽然结果对我来说没用)。

The Derby documentation声明支持。我究竟做错了什么?

回答

3

您发布的链接仅仅是一个草稿,以指定如何实现该功能。

如果向下滚动一点你会发现:

的ROW_NUMBER()窗函数的实现包含在德比开始与10.4.1.3版本。限制和使用说明可在Derby参考手册中找到

当你再看看德比手册(你的链接是不是手动)http://db.apache.org/derby/docs/10.10/ref/rreffuncrownumber.html你会发现限制的列表:

  • Derby当前不允许在OVER()子句中指定已命名或未命名的窗口规范,但需要一个空括号。这意味着函数将在整个结果集上进行评估。
  • 当前不能在WHERE子句中使用ROW_NUMBER函数。
  • Derby目前不支持子查询中的ORDER BY,所以目前没有办法保证SELECT子查询中行的顺序。如果排序是一个确定的要求,则优化器覆盖可用于强制优化器使用在所需列上排序的索引。