Oracleでは、ネストされたテーブルをデータベース列として格納できます。これは、ネストされたテーブル全体がデータベーステーブルの1つの行に含まれ、データベースの各行に異なるネストされたテーブルを含めることができることを意味します。ネストされたテーブルをデータベースに保存するには、CREATE TYPE
を使用する必要があります PL / SQLブロックのtype文ではなく、ネストされた表型を作成する文。
CREATE TYPE
を使用する 、タイプはデータディクショナリに格納されるため、列タイプとして使用できます。次の例は、ネストされたテーブルをデータベース列として作成する方法を示しています。
Oracle PL/SQL-データベースにネストされた表を作成する
CREATE TYPE BookObj AS OBJECT ( title VARCHAR2(40), author VARCHAR2(40), catalog_number NUMBER(4) ); CREATE TYPE BookList AS TABLE OF BookObj; CREATE TABLE course_material ( department CHAR(3), course NUMBER(3), required_reading BookList ) NESTED TABLE required_reading STORE AS required_tab;
上記のリストとデータベース内のネストされたテーブルの作成について注意すべき点がいくつかあります。
- テーブルタイプは
CREATE TYPE
で設計されています データディクショナリに保存できるようにするためのステートメント。 - テーブルタイプは、列オブジェクトと同じように、テーブル定義で使用されます。
- 特定のデータベーステーブル内のネストされたテーブルごとに、
NESTED TABLE
句が必要です。この句は、ストアテーブルの名前を示します。
ストアテーブルは、ネストされたテーブルに実際のデータを格納するために使用されるシステム生成のテーブルです。このデータは、残りのテーブル列とインラインで保存されません。個別に保存されます。
required_reading
列にはREF
が格納されます required_tab
に 書籍のリストが保存されるテーブル。 course_material
の各行について 、required_readingには、required_tabの対応する行へのREFが含まれています。
注
ストアテーブル(
required_tab
上記の例では)は別のスキーマに存在でき、メインテーブルとは異なるストレージパラメータを持つことができます。ストアテーブルは記述可能であり、user_tables
に存在します 、ただし直接アクセスすることはできません。
ストアテーブルを直接クエリまたは変更しようとすると、Oracleエラー「ORA-22812:ネストされたテーブル列のストレージテーブルを参照できません」が発生します。 ストアテーブルの内容は、メインテーブルのSQLを介して操作されます。
参照:
- Oracle PL / SQL –コレクション(ネストされたテーブル)