Оптимизация хранимых условий отбора
Post on 11-Jan-2016
46 Views
Preview:
DESCRIPTION
Transcript
Оптимизация хранимых условий отбора
Миндияров Илья
Главный специалист
Центра информационных технологий и консалтинга ПАРУС
mindiyarov@parus.ru
Комплексная система управления.
Хранимые условия отбора
Для пользователей, которым надо манипулировать несколькими типовыми комбинациями условий отбора, предлагается альтернативный механизм, называемый хранимыми условиями отбора. Он доступен во всех приложениях Системы в большинстве разделов. Суть этого механизма в том, что пользователь имеет возможность заранее подготовить для каждого раздела Системы любое количество типовых условий отбора.
ПРОБЛЕМА1: Медленная работа хранимых условий отбора.
ПРОБЛЕМА2: Нет возможности выполнить процедуру PL/SQL, для реализации сложной логики.
РЕШЕНИЕ1: Ждать реализации условий отбора в разделе через PKG_COND_BROKER
РЕШЕНИЕ2: Установить проектное решение из этой презентации
Комплексная система управления.
Пример использования Система контроля учетных данных
Пример папок отбора
Комплексная система управления.
Вопросы рассматриваемые в презентации
• Ускорение работы хранимых условий отбора
Для получения текста программ нажмите правой кнопкой мыши на объекте “Hru.zip” выберите “Копировать”, а затем в проводнике нажмите правую кнопку мыши и выберите “Вставить”.
Hru.zip
Комплексная система управления.
Оптимизация хранимых условий отбора
ВАЖНО! После выполнения скрипта из Hru.zip будет заменен штатный объект
F_CONDFOLDERS_WHERE_CLAUSE
Теперь при написании запросов станут доступны следующие конструкции• /*rawsql*/ - при добавлении условия не будут добавляться “ in (…)”• /*proc … proc*/ - перед выполнением запроса будет выполнена процедура PL/SQL
Комплексная система управления.
Пример использования
В модуле “Администратор” “Словари”->”Хранимые условия отбора”->”Таблицы отбора”
Комплексная система управления.
Пример использования
Выполняем действие “Генерация состава”
Комплексная система управления.
Пример использования
В модуле “Администратор” “Словари”->”Хранимые условия отбора”->”Схемы отбора”
Комплексная система управления.
Пример использования
Выбираем действие “Папки…”
Комплексная система управления.
Пример использования
Добавляем папку “_В месяце
Комплексная система управления.
Пример использования
Добавляем папку “_Текущий расчет”
Комплексная система управления.
Пример использования
Создадим функции
create or replace function UDO_F_SLCALCWAGES_CALCMONTH return number isbegin return PKG_SLCALCWAGES.CALCMONTH;end;/grant execute on UDO_F_SLCALCWAGES_CALCMONTH to public/create or replace function UDO_F_SLCALCWAGES_CALCYEAR return number isbegin return PKG_SLCALCWAGES.CALCYEAR;end;/grant execute on UDO_F_SLCALCWAGES_CALCYEAR to public/create or replace function UDO_F_SLCALCWAGES_CALCULATION return number isbegin return PKG_SLCALCWAGES.CALCULATION;end;/grant execute on UDO_F_SLCALCWAGES_CALCULATION to public/
Комплексная система управления.
Пример использования
В модуле “Расчет зарплаты” “Функции”->”Расчет зарплаты” перейдем на вкладку “Папки”
Комплексная система управления.
Пример использования
Запустим “Монитор SQL-запросов”
Комплексная система управления.
Пример использования
Узнаем как называется (какой имеет псевдоним) главное представление раздела
select V_CLNPSPFM.*, F_CLNPSPFM_GET_CHARGE(NCOMPANY, NRN) N78928, F_CLNPSPFM_GET_RETAIN(NCOMPANY, NRN) N78929, F_CLNPSPFM_GET_OVERPAY(NCOMPANY, NRN) N78930, F_CLNPSPFM_GET_PAY(NCOMPANY, NRN) N78931, F_CLNPSPFM_GET_GRWAGES(NCOMPANY, NRN) N78932, F_CLNPSPFM_GET_RATE(NCOMPANY, NRN) N78933, substr(F_CLNPSPFM_GET_SCHEDULE(NCOMPANY, NRN), 1, 240) S78934, substr(F_CLNPSPFM_GET_SLCOSTS(NCOMPANY, NRN), 1, 240) S78935 from V_CLNPSPFM where nCOMPANY = :A$COMPANY order by SSURNAME, DBEGENG
В нашем случае псевдонима нет – представление так и называется V_CLNPSPFM
Комплексная система управления.
Пример использования
Возвращаемся в модуль “Администратор” и у папки “_В месяце” нажимаем на кнопку “Запрос”
Комплексная система управления.
Пример использования
Возвращаемся в модуль “Администратор” и у папки “_В месяце” нажимаем на кнопку “Запрос”
В начале запроса вставим /*rawsql*/ - это позволит нам использовать exists вместо
in (…)
Комплексная система управления.
Пример использования
Результат:
select V_CLNPSPFM.*, F_CLNPSPFM_GET_CHARGE(NCOMPANY, NRN) N78928, F_CLNPSPFM_GET_RETAIN(NCOMPANY, NRN) N78929, F_CLNPSPFM_GET_OVERPAY(NCOMPANY, NRN) N78930, F_CLNPSPFM_GET_PAY(NCOMPANY, NRN) N78931, F_CLNPSPFM_GET_GRWAGES(NCOMPANY, NRN) N78932, F_CLNPSPFM_GET_RATE(NCOMPANY, NRN) N78933, substr(F_CLNPSPFM_GET_SCHEDULE(NCOMPANY, NRN), 1, 240) S78934, substr(F_CLNPSPFM_GET_SLCOSTS(NCOMPANY, NRN), 1, 240) S78935 from V_CLNPSPFM where /*rawsql*/ exists
(select null from v_slpays_shadow s where s.nclnpspfm=v_clnpspfm.nrn and S.NMONTH = UDO_F_SLCALCWAGES_CALCMONTH and S.NYEAR = UDO_F_SLCALCWAGES_CALCYEAR) and nCOMPANY = :A$COMPANY order by SSURNAME, DBEGENG
Комплексная система управления.
Пример использования
Для папку “_Текущий расчет” условие будет
/*rawsql*/ exists
(
select null
from v_slpays_shadow s
where s.nclnpspfm=v_clnpspfm.nrn
and S.NSLCALCULAT = UDO_F_SLCALCWAGES_CALCULATION
)
Комплексная система управления.
Пример использования
Реализация сложного отбора с помощью процедуры PL/SQL
Комплексная система управления.
Пример использования
Реализация сложного отбора с помощью процедуры PL/SQL
Вставляем комментарий вида /*proc begin … end; proc*/
top related