レコード型とコレクションで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;

添え字に項目名が使えるので少しだけ便利になっているのでは?