1

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

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

我该怎么做?

4

1 回答 1

2

可能是这样的。

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;
于 2012-08-22T05:11:56.663 回答