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

时间:2014-11-06 05:57:38

标签: 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;

但它应该是一种没有循环并使用sum的方法。

类似的东西:

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

1 个答案:

答案 0 :(得分:0)

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

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;

这将计算最小值。另外,您可以查看SO sorting the assotiative arrays上的另一个答案。

如果是嵌套表,您可以使用table functions. 假设您在数据库层上有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;