Я использую Oracle Forms 10g в базе данных Oracle версии 7.
У меня есть блок данных, который обновляется (новый execute_query) двумя разными способами:
1. Кнопка как это реализовать:
PROCEDURE refresh
IS
ID NUMBER;
BEGIN
ID := :myblock.id;
GO_BLOCK ('myBlock');
EXECUTE_QUERY;
-- Keep the record selected after the refresh
POSITION (ID);
END;
PROCEDURE POSITION (ID IN NUMBER)
IS
L_record NUMBER (5) := NULL;
BEGIN
GO_BLOCK ('myBlock');
GO_ITEM ('myBlock.ID');
FIRST_RECORD;
LOOP
IF :myblock.id = myID THEN
L_record := GET_BLOCK_PROPERTY ('myBlock', CURRENT_RECORD);
END IF;
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE' OR :myblock.ID = myID;
NEXT_RECORD;
END LOOP;
IF L_record IS NOT NULL THEN
GO_RECORD (L_record);
END IF;
END;
2.Другая еще одна кнопка, которая делает это:
PROCEDURE newRefresh
IS
ID NUMBER;
BEGIN
ID := :myblock.id;
refresh;
POSITION (ID);
END;
Игнорируя причину этих двух кнопок, моя проблема в том, что когда я вызываю вторую кнопку, первый вызов процедуры POSITION
занимает слишком много времени (потому что у нас много записей и триггер POST_QUERY
), но вторая вызов той же процедуры очень быстрый.
В чем причина такого поведения? Существует ли самый быстрый способ расположить фокус на той же записи, выбранной ранее?