Оптимизация хранимых условий отбора Миндияров Илья Главный специалист Центра информационных технологий и консалтинга ПАРУС
Комплексная система управления. Хранимые условия отбора Для пользователей, которым надо манипулировать несколькими типовыми комбинациями условий отбора, предлагается альтернативный механизм, называемый хранимыми условиями отбора. Он доступен во всех приложениях Системы в большинстве разделов. Суть этого механизма в том, что пользователь имеет возможность заранее подготовить для каждого раздела Системы любое количество типовых условий отбора. ПРОБЛЕМА1: Медленная работа хранимых условий отбора. ПРОБЛЕМА2: Нет возможности выполнить процедуру PL/SQL, для реализации сложной логики. РЕШЕНИЕ1: Ждать реализации условий отбора в разделе через РЕШЕНИЕ1: Ждать реализации условий отбора в разделе через PKG_COND_BROKER РЕШЕНИЕ2: Установить проектное решение из этой презентации
Комплексная система управления. Пример использования Система контроля учетных данных Пример папок отбора
Комплексная система управления. Вопросы рассматриваемые в презентации Ускорение работы хранимых условий отбора Для получения текста программ нажмите правой кнопкой мыши на объекте Hru.zip выберите Копировать, а затем в проводнике нажмите правую кнопку мыши и выберите Вставить.
Комплексная система управления. Оптимизация хранимых условий отбора ВАЖНО! После выполнения скрипта из Hru.zip будет заменен штатный объект F_CONDFOLDERS_WHERE_CLAUSE Теперь при написании запросов станут доступны следующие конструкции /*rawsql*/ - при добавлении условия не будут добавляться in (…) /*rawsql*/ - при добавлении условия не будут добавляться in (…) /*proc … proc*/ - перед выполнением запроса будет выполнена процедура PL/SQL /*proc … proc*/ - перед выполнением запроса будет выполнена процедура PL/SQL
Комплексная система управления. Пример использования В модуле Администратор Словари->Хранимые условия отбора->Таблицы отбора
Комплексная система управления. Пример использования Выполняем действие Генерация состава
Комплексная система управления. Пример использования В модуле Администратор Словари->Хранимые условия отбора->Схемы отбора
Комплексная система управления. Пример использования Выбираем действие Папки…
Комплексная система управления. Пример использования Добавляем папку _В месяце
Комплексная система управления. Пример использования Добавляем папку _Текущий расчет
Комплексная система управления. Пример использования Создадим функции create or replace function UDO_F_SLCALCWAGES_CALCMONTH return number is begin return PKG_SLCALCWAGES.CALCMONTH; end; / grant execute on UDO_F_SLCALCWAGES_CALCMONTH to public / create or replace function UDO_F_SLCALCWAGES_CALCYEAR return number is begin return PKG_SLCALCWAGES.CALCYEAR; end; / grant execute on UDO_F_SLCALCWAGES_CALCYEAR to public / create or replace function UDO_F_SLCALCWAGES_CALCULATION return number is begin 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*/