【发布时间】:2011-01-05 12:34:23
【问题描述】:
我在 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
内部查询使用边界框从 MY_TABLE 中选择行。包含外部查询以启用对结果的分页。
出于某种奇怪的原因,此查询没有产生任何结果。如果我尝试运行子查询:
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..
【问题讨论】:
-
您能否给我们 MY_TABLE 的 CREATE TABLE 语句和一些插入,以便其他人可以重现?
标签: oracle spatial row-number