oracle更新集合

时间:2012-08-21 21:59:34

标签: plsql oracle11g

我有两个用户定义的集合类型。第一种类型有列:

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

我该怎么做?

1 个答案:

答案 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;