我有两个用户定义的集合类型。第一种类型有列:
CREATE OR REPLACE
TYPE collection_1 as OBJECT
(
currency_code varchar2(30),
amount number
)
我已经使用oracle bulk collect在存储过程中填充了这个集合。现在让我们说,集合的值如下:
currency_code amount
CAD 100
USD 50
CAD 120
USD 30
现在我想在此集合上执行一些聚合函数,并填充另一个将存储每种货币总量的集合。所以我定义了另一个这样的集合:
CREATE OR REPLACE
TYPE collection_2 as OBJECT
(
currency_code varchar2(30),
total_amount number
)
并将其初始化为:
currency_code total_amount
CAD 0
USD 0
GBP 0
现在我想迭代collection_1并填充collection_2,以便collection_2读取如下:
currency_code total_amount
CAD 220 --i.e.100+120
USD 80
GBP 0
我该怎么做?
答案 0 :(得分:1)
可能是这样的。
declare
TYPE t_coll_1 is TABLE OF collection_1;
v_coll_1 t_coll_1;
TYPE t_coll_2 is TABLE OF collection_2;
v_coll_2 t_coll_2;
begin
/* populate v_coll_1 */
/* populate v_coll_2 */
for i in v_coll_2.first.. v_coll_2.last
loop
for j in v_coll_1.first.. v_coll_1.last
loop
if v_coll_2(i).currency_code = v_coll_1(j).currency_code
then
v_coll_2(i).total_amount := v_coll_2(i).total_amount + v_coll_1(j).total_amount;
end if;
end loop;
end loop;
end;