Arrays PL/SQL中关联数组值的总和
在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
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);结束代码>