在Oracle中,当我的内部查询包含SDO_ANYINTERACT时,为什么我不能在外部查询中选择rownum?
我在Oracle中编写了一个查询,如下所示:在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,
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修补程序集解决了此问题。