Поиск записей по блоку очень медленных оракулов - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть процедура, в которой введите число посещений и поиск записей в блоке.Но эта процедура поиска записей занимает от 3 до 4 минут, и в блоке содержится 12672 записей.Как оптимизировать процедуру быстрого поиска записей.

КОД:

DECLARE 
BEGIN
IF :CTRL_BLOCK.SRCH_VISITNO IS NULL THEN
     MESSAGE('Please enter Visit No...');
     GO_ITEM('SRCH_VISITNO');
ELSE
   BEGIN
         GO_BLOCK('cpvdtl');
         FIRST_RECORD;
         LOOP
             IF :cpvdtl.visitno = :CTRL_BLOCK.srch_visitno THEN
            exit;
         ELSE
            NEXT_RECORD;
         END IF;
       EXIT WHEN :SYSTEM.LAST_RECORD='TRUE';
         END LOOP;
     EXCEPTION
         WHEN NO_DATA_FOUND THEN
            MESSAGE('No Data found...!');
     END;               
         END IF;
     :CTRL_BLOCK.srch_visitno := null;
go_item('cpvdtl.visitno');
END;

1 Ответ

1 голос
/ 19 сентября 2019

Зачем изобретать велосипед?

Функциональность форм по умолчанию работает на отлично, просто:

  • создать блок на столе
  • запустить форму
  • войти в режим запроса
  • ввести критерии поиска в любой столбец (включая символы подстановки)
  • выполнить запрос

Если какая-либо запись соответствует критериям, она будетотображается на экране.


Если вы настаиваете на собственном поле поиска, создайте его (что вы уже сделали).Тогда:

  • Я бы предложил вам создать кнопку
  • , чтобы создать WHEN-BUTTON-PRESSED триггер, который будет
    • использовать SET_BLOCK_PROPERTY встроенный, используясвойство ONETIME_WHERE (или DEFAULT_WHERE; посмотрите, что подходит лучше), установив значение поля поиска в предложение блока where
    • EXECUTE_QUERY

Почему кнопка, а не только поле поиска?Потому что тогда вы использовали бы WHEN-VALIDATE-ITEM триггер для SET_BLOCK_PROPERTY, но вы не могли EXECUTE_QUERY в этом триггере, поскольку это ограниченная процедура.Да, вы можете использовать триггер KEY-NEXT-ITEM, но - что если пользователь выходит из поля поиска с помощью мыши?Этот триггер не сработает.Я бы сказал, что кнопка - более простой выбор.

...