数据块上的循环速度非常慢(oracle表单、pl/sql)

数据块上的循环速度非常慢(oracle表单、pl/sql),sql,forms,performance,oracle,plsql,Sql,Forms,Performance,Oracle,Plsql,我创建了一个小循环,从Oracle表单中的数据块中选择最大值。我必须这样做,因为块有时从另一个窗体获取全局参数,有时它有一个不同的默认where子句等。它从不同的源填充,所以我不能创建游标,或者我必须动态执行 我的循环声明如下: loop exit when :system.last_record = 'TRUE'; if (:block.number > v_max) then v_max := :block.number; end if; next_record; end lo

我创建了一个小循环,从Oracle表单中的数据块中选择最大值。我必须这样做,因为块有时从另一个窗体获取全局参数,有时它有一个不同的默认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条记录的块也需要很长时间

还是有更简单的方法从块中的列中选择最大值


提前感谢,

您的post\u查询触发器中可能有很多计算和额外的获取?这将针对每一行执行

或者,您可以设置块参数“FETCH ALL RECORDS=true”,并在post_查询触发器中更新一个全局变量(在预查询触发器中已用0初始化)

e、 g。 预查询:

:gobal.maxvalue := 0;
post_查询(请注意,这将针对每一行执行):


之后,您可以使用全局变量

Hi!不能改为修改块的默认位置吗?
    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;