Oracle Form と pl/sql は初めてです。これが私の問題です 私のフォームでは、BOS_M_HOLIDAY という名前のテーブルから取得したレコードを表示する 3 つのデータ ブロックを取得しました。しかし、どういうわけか、ループ後に各データブロックに表示される最後のレコードだけです。レコードを取得する方法は、PRE-FORM トリガーと WHEN-TIME-EXPIRED トリガーを使用することです。PRE-FORM Trigger の私のコードは次のとおりです。
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 トリガーを使用すると機能します。私の英語をむき出しにして、わからない部分があれば遠慮なく聞いてください。ありがとう!