Я написал запрос в Oracle который выглядит следующим образом:В Oracle, почему я не могу выбрать rownum во внешнем запросе, когда мой внутренний запрос содержит SDO_ANYINTERACT?
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 ..
Не могли бы вы дать нам инструкцию CREATE TABLE MY_TABLE и пару вставок, чтобы другие могли воспроизводить? –