其實 - 通常上面的代碼是錯誤的,通過關聯數組循環。嘗試這個。
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
可以aggragate它的價值就像所示波紋管
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).weight:= 1;和(2).weight:= 3。有沒有辦法讓這些值的總和(在這裏的例子將是4)沒有循環? – 2014-11-06 08:22:39
我更新了我的答案,以使塊計算總和而不是最大值。對於關聯數組您沒有像嵌套表的表函數那樣的任何選項,唯一的方法是循環訪問數組。 – mikron 2014-11-06 08:52:41
感謝您的更新。我能夠使用更新後的版本,而我的擔心是總結重量值。所以代碼將如下所示:[link](http://example.com)_italic_ ** bold **'聲明 類型t_array_rec是記錄( 重量數字); 類型t_array是由pls_integer的t_array_rec索引表; arr t_array; li_idx int; li_summ int:= 0; begin arr(1).weight:= 100; arr(2).weight:= 200; arr(3).weight:= 150; 從table(arr.weight)中選擇sum(column_value)到li_summ; dbms_output.put_line(li_summ); end;' – 2014-11-17 10:15:46