Oracle Forms - команда execute_query работает очень медленно - PullRequest
0 голосов
/ 02 апреля 2019

У меня проблема при выполнении запроса в формах Oracle. Мой код выглядит так:

--debug 0
next_block;
--debug 1
execute_query;
--debug 2

Этот код от KEY-NXTBLK триггер. Я вывожу некоторый журнал перед командой execute_query и после нее. При выполнении запроса непосредственно в базе данных он работает просто отлично, и у меня результат через 2 секунды , но в формах мне нужно ждать 2 минуты , чтобы получить результаты. Знаете ли вы, почему это занимает так много времени, чтобы выполнить его в формах? Может я что-то там упускаю? Какие-либо триггеры выполняются вместе с командой execute_query?

1 Ответ

1 голос
/ 02 апреля 2019

Какая версия Forms это?

Если это 9i и более, вы можете использовать его опцию отладки и трассировки выполнения.Как включить это?Щелкните правой кнопкой мыши левое поле в опубликованном триггере и установите точку останова NEXT_BLOCK.Запустите форму в режиме отладки (это зеленый значок светофор , расположенный рядом с тем, который вы используете для обычного запуска формы).Формы на этом остановятся и позволят вам действовать поэтапно (имеется в виду: команда за командой).Затем вы увидите, что происходит, какие триггеры выполняются, сколько времени затрачивается на определенные команды.

Если вы используете 6i, поместите вызовы MESSAGE в триггеры, чтобы вы зналичто выполняется, в каком порядке.

По вашему вопросу: NEXT_BLOCK само по себе может вызвать срабатывание определенных триггеров, таких как WHEN-VALIDATE-RECORD (для записи в блоке "current"), PRE-BLOCK (для блока "next"), WHEN-NEW-RECORD-INSTANCE (для первой записи в блоке "next").EXECUTE_QUERY вызовет срабатывание триггера POST-QUERY (используется для заполнения элементов, не относящихся к базе данных), поэтому, если запрос возвращает много строк и срабатывает три раза, для каждого из них может потребоваться некоторое время для завершения.

Кроме того, попытайтесь ограничить количество возвращаемых строк;откройте палитру свойств блока, перейдите в раздел «Записи» и проверьте свойства и их значения (например, если для «Запросить все записи» установлено значение «Да», установите для него значение «Нет»).Для чего установлено «Количество записей в буфере»?Чтобы получить дополнительную информацию о каждом свойстве, нажмите на него и нажмите F1, чтобы открыть справочную систему Forms Online.

Проверьте предложение WHERE блока, а также ORDER BY.Если они несколько сложны, выборка может пострадать.

...