Arrays PL/SQL中关联数组值的总和

Arrays PL/SQL中关联数组值的总和,arrays,plsql,sum,Arrays,Plsql,Sum,在PL/SQL中是否有任何方法可以获得关联数组的值之和。通常代码如下所示: FOR i IN a.FIRST .. a.LAST LOOP IF a (i).weight > 0 THEN flag := FALSE; END IF; END LOOP; 但这应该是一种不用循环和求和的方法 比如: IF SUM(a.weight) > 0 THEN flag := FAL

在PL/SQL中是否有任何方法可以获得关联数组的值之和。通常代码如下所示:

    FOR i IN a.FIRST .. a.LAST
     LOOP
        IF a (i).weight > 0
        THEN
           flag := FALSE;
        END IF;
     END LOOP;
但这应该是一种不用循环和求和的方法

比如:

 IF SUM(a.weight) > 0
 THEN
     flag := FALSE;
 END IF;

实际上-通常上面的代码在关联数组中循环是错误的。试试这个

declare
   type t_array_rec is record(
      weight number);
   type t_array is table of t_array_rec index by pls_integer;
   arr t_array;
   li_idx int;
   li_summ int := 0;
begin
   arr(1).weight := 100;
   arr(3).weight:= 200;
   arr(5).weight := 150;

   li_idx := arr.first;
   while (li_idx is not null) loop
      li_summ := li_summ + nvl(arr(li_idx).weight, 0);          
      li_idx := arr.next(li_idx);
   end loop;
   dbms_output.put_line(li_summ);
end;
这将计算最小值。你也可以看看另一个答案

对于嵌套表,可以使用 假设您在数据库层上有TTI类型

CREATE OR REPLACE TYPE TTI as table of int
你可以像下面所示的那样计算它的值

declare   
   arr TTI := TTI(100, 200, 150);
   li_summ number;
begin
   select sum(column_value) into li_summ from table(arr);
   dbms_output.put_line(li_summ);
end;

嗨,谢谢你的回答。忽略循环的方式,我要寻找的是值的总和。假设a(1)。权重:=1;和a(2)。重量:=3。有没有办法让这些值的总和(在这里的示例中为4)不循环?我更新了我的答案,使块计算总和而不是最大值。对于关联数组,您没有任何选项,如嵌套表的表函数,唯一的方法是通过数组循环。感谢您的更新。我可以使用更新版本,而我关心的是求和权重值。所以代码是这样的:斜体粗体
声明类型t\u array\u rec is record(重量编号);类型t_数组是由pls_整数组成的t_数组rec索引表;阵列天线;李_idx int;li_sum int:=0;开始arr(1)。重量:=100;arr(2).重量:=200;arr(3).重量:=150;从表(arr.weight)中将sum(column_value)选择为li_sum;dbms_output.put_line(li_summ);结束