循环数据块极慢(oracle表单,pl / sql)

时间:2014-02-17 14:05:24

标签: sql forms performance oracle plsql

我创建了一个小循环来从Oracle Forms中的数据块中选择最大值。我必须这样做,因为块有时从另一个表单获取全局参数,或者有时它具有不同的默认where子句等。它从不同的源填充,所以我不能创建游标或我不得不这样做它是动态的。

我拥有的循环声明如下:

loop
exit when :system.last_record = 'TRUE';
if (:block.number > v_max) then
    v_max := :block.number;
end if;
next_record;
end loop;

为什么这么慢?甚至用10条记录检查一个块需要很长时间。

或者是否有更简单的方法从块中的列中选择最大值?

提前致谢,

1 个答案:

答案 0 :(得分:1)

你的post_query触发器中可能有很多计算和额外的提取?这将在每一行执行。

或者你可以设置块参数" FETCH ALL RECORDS = true",并在post_query触发器中更新一个全局变量(你在预查询触发器中初始化为0)。

e.g。 pre_query:

:gobal.maxvalue := 0;

post_query(注意每行执行一次):

    if :block.number > :gobal.maxvalue then   
           :gobal.maxvalue := :block.number;
    end if;
    if :system.last_record = 'TRUE' then
       do something with :global.maxvalue;  -- we are on the last record of the query, so do something with the max value
    end if;

之后你可以使用全局变量