【发布时间】:2019-04-25 02:17:52
【问题描述】:
我在 Oracle 数据库版本 7 上使用 Oracle Forms 10g。 我有一个数据块,它通过两种不同的方式刷新(新的 execute_query):
1.A按钮如何实现:
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 触发器),但是第二个相同程序的调用速度非常快。
这种行为的原因是什么?有没有最快的方法将焦点定位在之前选择的同一条记录上?
【问题讨论】:
标签: oracle oracle10g oracleforms