有没有办法在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;
答案 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;