📝 PL/SQLコレクション入門:データのリストを賢く扱おう
PL/SQLには、複数のデータをまとめて管理するための「コレクション」という便利な仕組みがあります。これは、他のプログラミング言語でいうところの「配列」のようなものです。
コレクションを使えば、バラバラのデータを一つの箱にまとめて、効率的に処理できるようになります。
1. コレクションの基本概念 📦
コレクションは「一次元配列」であり、以下の特徴を持っています。
要素(Element): コレクションに格納される個々のデータ。
インデックス(Index): 各要素に割り当てられた位置番号。
同じデータ型: コレクション内のすべての要素は、同じデータ型(
VARCHAR2、NUMBER、RECORDなど)でなければなりません。
疎と密:コレクションの状態
密なコレクション (Dense):すべてのインデックスにデータが入っていて、隙間がない状態。
疎なコレクション (Sparse):インデックスの間にデータが入っていない隙間がある状態。
2. 3種類のコレクションを使い分けよう! 🗂️
PL/SQLには、用途に応じて3つのコレクションタイプがあります。
① 連想配列 (Associative Array)
【特徴】
インデックス:
BINARY_INTEGER(数値)またはVARCHAR2(文字列)でインデックスを付けられます。初期化不要: 使う前に初期化する必要はありません。
データベースに保存不可: データベースの列に直接格納することはできません。
隙間OK: 疎なコレクションを作成できます。
【使い分けのポイント】 最も一般的でよく使われるタイプです。特に、文字列をインデックスとして使いたい場合に便利です。
② ネストされたテーブル (Nested Table)
【特徴】
インデックス: 整数値のみでインデックスを付けられます。
初期化必須: 使う前に
コンストラクタで初期化が必要です。データベースに保存可能: データベースの列に格納できます。
隙間OK: 疎なコレクションを作成できますが、通常は密になります。
【使い分けのポイント】
データベースにコレクションを保存したい場合に適しています。また、後述するMULTISET演算子を使いたい場合に便利です。
③ VARRAY (Variable-size Array)
【特徴】
サイズ固定:
DECLAREで上限の要素数を必ず指定します。初期化必須: 使う前に初期化が必要です。
データベースに保存可能: データベースの列に格納できます。
隙間なし: 密なコレクションであり、一度作った要素は削除できません。
【使い分けのポイント】 要素数があらかじめ決まっている場合にのみ使います。非常に特殊なケースでしか使われないため、ほとんどの場合、連想配列やネストされたテーブルを使います。
3. コレクションを操作する便利メソッド 🔨
コレクションには、データを操作するための便利なメソッド(関数)が多数用意されています。
EXTENDとTRIMは主にネストされたテーブルとVARRAYで使われます。DELETEは連想配列とネストされたテーブルで使えますが、VARRAYでは使えません。
4. MULTISET演算子:ネストされたテーブルの特権! 🤝
ネストされたテーブルは、MULTISET演算子を使って、集合演算(複数のセットを結合したり、共通部分を見つけたりする)ができます。これはSQLのUNIONやINTERSECTと同じような働きをします。
このように、コレクションを使いこなすことで、PL/SQLでのデータ処理が格段に効率的になります。特に、大量データを扱う際には必須のテクニックです。
