レコード型とコレクションで2次元配列
Oracle に用意されているレコード型とコレクション(配列)を使うことでちょっと便利な配列が作れます。
レコード型
PL/SQL で、構造体を使いたい場合レコード型を使うと実現することができます。例えば、次のような ID と NAME を持つレコード型を作成してみます。
DECLARE
TYPE REC_USER IS RECORD (
ID NUMBER NOT NULL DEFAULT -1,
NAME VARCHAR(8) DEFAULT 'NO NAME'
);
HOGE REC_USER;
BEGIN
HOGE.ID := 1;
DBMS_OUTPUT.PUT_LINE(HOGE.ID || ',' || HOGE.NAME);
END;
レコード型といわれるようにテーブルに定義する項目同様、 NOT NULL などが指定できます。
上記プログラムを実行すると次のように出力されます。
1,NO NAME
レコードを配列にする
Oracle で配列を扱いたい時、コレクションを使います。次のように TABLE OF … INDEX BY を使用する事で配列を実現することができますが、レコード型と組み合わせることでちょっと便利な配列が作成できます。
DECLARE
TYPE REC_USER IS RECORD (
ID NUMBER NOT NULL DEFAULT -1,
TEMP NUMBER,
HUMIDITY NUMBER
);
TYPE TBL_USER IS TABLE OF REC_USER INDEX BY BINARY_INTEGER;
HOGE TBL_USER;
BEGIN
FOR i IN 1..5 LOOP
HOGE(i).ID := i;
HOGE(i).TEMP := i+30;
HOGE(i).HUMIDITY := i+40;
END LOOP;
FOR i IN 1..HOGE.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(HOGE(i).ID || ',' || HOGE(i).TEMP || ',' || HOGE(i).HUMIDITY);
END LOOP;
END;
添え字に項目名が使えるので少しだけ便利になっているのでは?