Нумерация результатов оракула, возвращаемых хранимыми процедурами - PullRequest
0 голосов
/ 15 сентября 2010

В нашем проекте все манипуляции с БД сосредоточены в хранимых процедурах Oracle.Наборы результатов возвращаются параметром OUT типа SYS_REFCURSOR.Теперь у нас есть задача сделать разбиение на страницы, и мы не хотим переписывать все наши процедуры, добавляя к ним 2 параметра (pageNumber и pageSize) и редактируя предложения WHERE.У нас есть идея написать некоторый тип процедуры-оболочки, которая может вызывать каждую из хранимых процедур, получать фрагмент из возвращенного набора результатов и передавать его.Проблема в том, что все процедуры получают разные списки параметров, поэтому мы не знаем, как реализовать это в оболочке.

Может кто-нибудь помочь нам?Может быть, мы можем решить это с помощью хранимых процедур Java?Может быть, мы можем решить это по-другому, не используя оболочку?

Извините за мой английский.

Thx.

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

Это может работать, но

  • не проверено,
  • возможно нецелесообразно, так как оно опирается на хранимую процедуру, называемую строкой,
  • возможно, плохо работает, так как
    • использует динамический SQL, а
    • перезапускает базовый SQL для разбивки на страницы;и
  • без проверки.
create or replace function paginate_sys_refcursor
  (p_page_number   in number,
   p_rows_per_page in number,
   p_sp_call       in varchar2(4000))
return sys_refcursor
authid current_user
as
  open p_sysref_cursor for
    'select *  ' || 
    '  from (select c.*, rownum as rn ' ||
    '          from cursor(' || p_sp_call || ')' ||
    '         where rownum = ' || (p_page_number - 1) * rows_per_page ;
    ' where rn >= ' || (p_page_number - 1) * rows_per_page ;

  return p_sysref_cursor;
end paginate_sys_refcursor;
1 голос
/ 15 сентября 2010

Хорошо, что вы использовали хранимые процедуры для выполнения выбора, но, к сожалению, у вас не было всех требований заранее - я бы предположил, что это гибкий проект ;-) Я действительно думаю, что единственный реальный путь вперед - это модификация.хранимые процедуры.Сколько их там?Если их очень много, возможно, есть смысл написать программу для автоматизации задачи - т.е. прочитать исходный код процедуры, добавить параметры и дополнительный код предложения WHERE.

0 голосов
/ 15 сентября 2010

Как вы называете свои хранимые процедуры?Вы печатаете результаты прямо из вызывающей программы?Похоже, вы захотите взглянуть на инструмент отчетности, который может обрабатывать печать.

...