🐥

【PL/SQL】索引付き表(メモ)

2024/08/17に公開

日常業務で索引付き表を作成する場面が多いので、定義について振り返ります。

索引付き表とは

PL/SQLで使用されるコレクションの一種で、他のプログラミング言語で言うところの連想配列に相当します。(バージョンによっては結合配列とも呼ばれます)
データを格納するための特別な形式のテーブルで、データがインデックスに格納されているため、検索やアクセスが迅速に行えます。

コレクションとは

同じデータ型の複数の値を受け取る変数をコレクションといいます。
レコードとは違い、要素と索引からなり、索引番号を使用して各要素にアクセスします。

索引付き表の定義

  1. 型の定義
    • TABLE型を定義します。
      TYPEキーワードを使用し、TABLE OFの後ろにTABLE型の要素のデータ型を指定します。
    • INDEX BY句を使用して、配列のインデックスのデータ型を指定します。
      INDEX BY句の後ろに指定したデータ型が索引のデータ型になります。
テーブル型の定義
TYPE<テーブル型> IS TABLE OF <データ型> [NOT NULL]
    INDEX BY {
        BINARY_INTEGER | PLS_INTEGER | <文字データ型> (<上限サイズ>)
    };

プロとしてのOracle PL/SQL入門第3版

  1. 結合配列の定義
    上記で定義したTABLE型と索引付き表名を対応付けます。
    索引付き表の定義
    <索引付き表名> <テーブル型名>;
    

プロとしてのOracle PL/SQL入門第3版

レコードの索引付き表

要素のデータ型にレコードを指定した索引付き表になります。
上記、索引付き表との違いは、TABLE OFのデータ型にレコード型を指定してること。

レコードとは

レコード型は名前をつけることができるデータのコンテナです。
レコード型を使用することで、複数のフィールドを持つデータを一つの変数として扱うことができます。

レコードの索引付き表の定義

TYPE<テーブル型> IS TABLE OF <レコード名> 
    INDEX BY {
        BINARY_INTEGER | PLS_INTEGER | <文字データ型> (<上限サイズ>)
    };

レコードにはユーザー定義レコードと%ROWTYPE属性の変数を使用できます。

プロとしてのOracle PL/SQL入門第3版

所感

ユーザー定義レコードを使用することで、複数の異なるデータ型を一つのレコードとしてまとめることができ、レコードの索引付き表の方が、実際の業務で使用することが多く感じます。
今回は、振り返りを兼ねて参考書をまとめたメモ的な感じでした。
実際の使用例については、また別の記事で振り返ろうと思います。

今後もPL/SQLの勉強を中心に進めていきたいのですが、なにかオススメな参考書等あればコメント頂けると幸いです。

Discussion