お風呂の温度、何℃にしてますか?

はじめまして。

各部門に所属している人の件数を配列に格納して処理したいと考えています。

(例)テーブル名:buhyo
SQL:select bumon_cd,count(*) from buhyo group by bumon_cd order by bumon_cd
上記SQLの結果↓
部門コード(bumon_cd)     count(*)
---------------------------------
A11                   100
A12                   150
A13                   200

上の結果であるA11と100、A12と150、A13と200をそれぞれ配列に入れたくて
PLSQLで以下のロジックを作成しましたが、うまくいかなくて困っています。
<ロジック>
DECLARE
CURSOR KEKKA IS SELECT BUMON_CD,BUMON_CD,COUNT(*) RCNT FROM BUHYO
GROUP BY BUMON_CD ORDER BY BUMON_CD;
TYPE BUMON_TAB IS TABLE OF KEKKA%ROWTYPE INDEX BY PLS_INTEGER;
WK_ARRAY BUMON_TAB;
BEGIN
FOR WK_BUMON IN KEKKA LOOP
I := I + 1;
WK_ARRAY(I).BUMON_CD = WK_BUMON.BUMON_CD;
WK_ARRAY(I).RCNT = WK_BUMON.RCNT;
DBMS_OUTPUT.PUT_LINE(WK_ARRAY(I).BUMON_CD || ',' || WK_ARRAY(I).RCNT);
END LOOP;
END;
/

これで出力しようとしてもWK_ARRAY配列に部門コードと件数が入りません。
どのようにすれば各部門とその対になる件数を配列に入れることが
可能でしょうか?ご教授ください。

よろしくお願いします。

A 回答 (1件)

変数Iが宣言されていないですし、代入文もおかしいです。


元のプログラムを極力変えずにいくと、

DECLARE
CURSOR KEKKA IS SELECT BUMON_CD,COUNT(*) RCNT FROM BUHYO
GROUP BY BUMON_CD ORDER BY BUMON_CD;
TYPE BUMON_TAB IS TABLE OF KEKKA%ROWTYPE INDEX BY PLS_INTEGER;
WK_ARRAY BUMON_TAB;
I PLS_INTEGER := 0; --追加
BEGIN
FOR WK_BUMON IN KEKKA LOOP
I := I + 1;
WK_ARRAY(I).BUMON_CD := WK_BUMON.BUMON_CD; -- = を := に修正
WK_ARRAY(I).RCNT := WK_BUMON.RCNT;-- = を := に修正
DBMS_OUTPUT.PUT_LINE(WK_ARRAY(I).BUMON_CD || ',' || WK_ARRAY(I).RCNT);
END LOOP;
END;
/

こんな感じでしょうか。
この場合、添え字は1から始まることになります。
    • good
    • 0
この回答へのお礼

yamada_gさん

お世話になります。

変数Iの宣言が必要なのですね。それから=ではなく:=ですね。
すいません。ご指摘ありがとうございます。

教えていただいた内容で配列に正しく格納できました。
本当にありがとうございます。
いろいろと勉強になります。

お礼日時:2011/12/21 00:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報