Oracle에서 내부 쿼리가 sdo_anyinteract가 포함되어있을 때 외부 쿼리에서 rownum을 선택할 수없는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2071854

  •  20-09-2019
  •  | 
  •  

문제

오라클에서 다음과 같은 쿼리를 썼습니다.

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

보다 이것 기사.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top