レコード型とコレクションで2次元配列

メモ:  Category:oracle

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;

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

bluenote by BBB