1

ユーザー定義のコレクション型が 2 つあります。最初のタイプには次の列があります。

CREATE OR REPLACE
TYPE collection_1 as OBJECT
(
currency_code   varchar2(30),
amount   number
)

このコレクションは、Oracle 一括収集を使用してストアド プロシージャ内に取り込まれました。つまり、コレクションには次のような値があるとしましょう。

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 に答える