sql >> データベース >  >> RDS >> Oracle

Oracle PL/SQLコレクション-データベースにネストされた表を作成

    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 –コレクション(ネストされたテーブル)
    1. sqlplusスクリプトのコンパイルエラーで停止します

    2. SQLのビューを理解する

    3. mysql接続を閉じることは重要ですか?

    4. MariaDBでのSUBDATE()のしくみ