Я новичок в Oracle Form и pl/sql. Вот моя проблема. В моей форме у меня есть 3 блока данных, которые отображают записи, которые я извлекаю из таблицы с именем BOS_M_HOLIDAY. Но почему-то после цикла в каждом блоке данных отображается только последняя запись. Я извлекаю записи с помощью триггера PRE-FORM и триггера WHEN-TIME-EXPIRED. Вот мой код в триггере PRE-FORM:
DECLARE
CURSOR a_aa is SELECT HOL_DATE FROM BOS_M_HOLIDAY WHERE REGEXP_LIKE(HOL_DATE, '.......12') ORDER BY HOL_DATE;
CURSOR a_bb is SELECT HOL_DATE FROM BOS_M_HOLIDAY WHERE REGEXP_LIKE(HOL_DATE, '.......13') ORDER BY HOL_DATE ;
CURSOR a_cc is SELECT distinct DESCR FROM BOS_M_HOLIDAY WHERE REGEXP_LIKE(HOL_DATE, '.......13')ORDER BY 1;
Timer_ID TIMER;
BEGIN
OPEN a_aa;
LOOP
FETCH a_aa INTO :holiday_2012.HOL_DATE;
EXIT WHEN a_aa%notfound;
Timer_ID := FIND_TIMER('CALL_NEXT_RECORD');
IF NOT Id_Null(Timer_ID) THEN
Delete_Timer(Timer_ID);
END IF;
Timer_ID := Create_Timer('CALL_NEXT_RECORD',1,NO_REPEAT);
END LOOP;
CLOSE a_aa;
OPEN a_bb;
LOOP
FETCH a_bb INTO :holiday_2013.HOL_DATE;
EXIT WHEN a_bb%notfound;
Timer_ID := FIND_TIMER('CALL_NEXT_RECORD');
IF NOT Id_Null(Timer_ID) THEN
Delete_Timer(Timer_ID);
END IF;
Timer_ID := Create_Timer('CALL_NEXT_RECORD',1,NO_REPEAT);
END LOOP;
CLOSE a_bb;
OPEN a_cc;
LOOP
FETCH a_cc INTO :description.DESCR;
EXIT WHEN a_cc%notfound;
Timer_ID := FIND_TIMER('CALL_NEXT_RECORD');
IF NOT Id_Null(Timer_ID) THEN
Delete_Timer(Timer_ID);
END IF;
Timer_ID := Create_Timer('CALL_NEXT_RECORD',1,NO_REPEAT);
END LOOP;
CLOSE a_cc;
END;
и вот мой код в триггере WHEN-TIME-EXPIRED:
DECLARE
v_Timer VARCHAR2(30) := Get_Application_Property(TIMER_NAME);
BEGIN
IF (v_Timer = 'CALL_NEXT_RECORD') THEN
NEXT_RECORD;
END IF;
END;
Этот код работает, когда я использую триггер WHEN-BUTTON-PRESSED без части TIMER. Не стесняйтесь моего английского и не стесняйтесь спрашивать меня, есть ли какие-то части, которые вы не понимаете. Спасибо!