في Oracle ، لماذا لا يمكنني تحديد Rownum في استعلام خارجي ، عندما يحتوي استعلام داخلي على SDO_AnyInteract؟
-
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
يرى هذه مقالة - سلعة.
لا تنتمي إلى StackOverflow