在Oracle中,当我的内部查询包含SDO_ANYINTERACT时,为什么我不能在外部查询中选择rownum?

在Oracle中,当我的内部查询包含SDO_ANYINTERACT时,为什么我不能在外部查询中选择rownum?,oracle,spatial,row-number,Oracle,Spatial,Row Number,我在Oracle中编写了一个查询,如下所示: select ID, NAME, GEOMETRY from ( select a.*, rownum as rnm from ( select ID, NAME, GEOMETRY from MY_TABLE where SDO_ANYINTERACT(GEOMETRY, SDO_UTIL.SDO_GEOMETRY('POLYGON ((670000 6268000, 670000 6269000,

我在Oracle中编写了一个查询,如下所示:

select ID, NAME, GEOMETRY from 
(
    select a.*, rownum as rnm from
    (
        select ID, NAME, GEOMETRY from MY_TABLE
        where SDO_ANYINTERACT(GEOMETRY, SDO_UTIL.SDO_GEOMETRY('POLYGON ((670000 6268000, 670000 6269000, 700000 6269000, 700000 6268000, 670000 6268000))')) = 'TRUE'
        order by NAME asc
    ) a
)
where rnm <= 50 and rnm >= 40
它产生了一个预期的结果列表。如果我运行子查询:

select ID, NAME, GEOMETRY from MY_TABLE
where SDO_ANYINTERACT(GEOMETRY, SDO_UTIL.SDO_GEOMETRY('POLYGON ((670000 6268000, 670000 6269000, 700000 6269000, 700000 6268000, 670000 6268000))')) = 'TRUE'
order by NAME asc
select a.*, rownum as rnm from
(
    select ID, NAME, GEOMETRY from MY_TABLE
    where SDO_ANYINTERACT(GEOMETRY, SDO_UTIL.SDO_GEOMETRY('POLYGON ((670000 6268000, 670000 6269000, 700000 6269000, 700000 6268000, 670000 6268000))')) = 'TRUE'
    order by NAME asc
) a
结果集为空。不知何故,rownum阻止查询产生任何结果。如果删除rownum,则返回的结果与最内层查询中的结果相同:

select a.* from
(
    select ID, NAME, GEOMETRY from MY_TABLE
    where SDO_ANYINTERACT(GEOMETRY, SDO_UTIL.SDO_GEOMETRY('POLYGON ((670000 6268000, 670000 6269000, 700000 6269000, 700000 6268000, 670000 6268000))')) = 'TRUE'
    order by NAME asc
) a
我在这里做错了什么?? 我正在运行Oracle 10g

with
    my_query as
    (
        select ID, NAME, GEOMETRY from MY_TABLE 
        where SDO_ANYINTERACT(GEOMETRY, SDO_UTIL.SDO_GEOMETRY('POLYGON ((670000 6268000, 670000 6269000, 700000 6269000, 700000 6268000, 670000 6268000))')) = 'TRUE' 
        order by NAME asc 
    )
select *
from
    (
        select /*+ FIRST_ROWS(n) */  my_query.*, rownum rnum
        from my_query
        where rownum <= :last_row_to_fetch
    )
where
    rnum >= :first_row_to_fetch

请参阅文章。

您能给我们MY_TABLE的CREATE TABLE语句和一些插入,以便其他人可以复制吗?它似乎起作用了!但是为什么呢??当我不使用SDO_ANYINTERACT时,我的查询运行正常。看起来真的很奇怪。看看我在解决方案中提到的那篇文章。它为这里发生的事情提供了一个很好的解释。瓦迪姆,我在文章中也看不到任何解释-你能详细说明吗?从表面上看,Jesper的原始代码应该可以工作。经过一些调查,似乎至少在我的系统上,引入rownum的子查询导致Oracle抛出内部异常ORA-00600,对此Oracle建议的补救措施是将其作为错误报告给他们。在工作中,我的开发服务器10gR2和修补程序毫无问题地执行Jesper的查询。可能是某个Oracle修补程序集解决了此问题。