gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:13:55 25 4
gpt4 key购买 nike

我在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。

最佳答案

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

请参阅 this文章。

关于oracle - 在Oracle中,当内部查询包含SDO_ANYINTERACT时,为什么不能在外部查询中选择rownum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2071854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com