Имам процедура, която връща няколко реда нанякои критерии и в конкретен ред. Тези редове са разделени на няколко страници (50 реда на страница). Как мога да извлича всички редове от страница с определен ред. Създадох заявка за заявката, която върши тази работа, но тя не е оптимизирана и има огромно влияние върху производителността. Помогнете ми да я оптимизирам или да я дам алтернатива
select *
from
(
select file_id, row_number() over (order by rownum) rn
from my_table
)
where trunc(rn/50) = (
select trunc(rn/50) from
(select t.*, rownum rn from my_table t)
where file_id = 29987);
Отговори:
0 за отговор № 1Трябва да го нагласиш малко ...
with tab as
(
-- the
-- row_number() over (order by rownum) rn
-- should be here
select level + 1000 as val
, level/50 as rn_50
from dual
connect by
level < 140
)
, val as
(
select rn_50
from tab
where val = 1004 -- pg 1
--where val = 1051 -- pg 2
--where val = 1101 -- pg 3
)
select *
from tab t
where rn_50 >= (select floor(rn_50) from val)
and rn_50 <= (select ceil (rn_50) from val)
;