「動物型の動物テーブルを作成するとき、「住んでいた場所」のネストされたテーブルを作成するにはどうすればよいですか?このためのフィールドが動物にはなく、犬だけです。」
これが遺伝の謎です。タイプ ANIMAL から構築されたテーブルには、実際にはそのサブタイプの属性をサポートする列があります。ただし、DOG サブタイプを明示的に使用する場合にのみアクセスできます。
これがデータ構造です。
create or replace type animal_t as object
( name varchar2(10)
, age number (3,0))
not final;
/
create or replace type places_nt as table of varchar2(20)
/
create or replace type dog_t under animal_t
( residence_history places_nt)
/
create table animals of animal_t;
金魚のレコードを作成するには、次のようにします。
insert into animals
values (animal_t('BOB', 7))
/
犬のレコードを作成するには、次のようにする必要があります。
insert into animals
values (dog_t('FIDO', 12, places_nt('Balham', 'Tooting')))
/
このクエリは、一般的な列のみを選択します。
SQL> select * from animals
2 /
NAME AGE
---------- ----------
BOB 7
FIDO 12
SQL>
犬に関する詳細を確認するには、レコードを関連するサブタイプにキャストする必要があります。
SQL> select treat(value(a) as dog_t)
2 from animals a
3 where value(a) is of (dog_t)
4 /
TREAT(VALUE(A)ASDOG_T)(NAME, AGE, RESIDENCE_HISTORY)
--------------------------------------------------------------------------------
DOG_T('FIDO', 12, PLACES_NT('Balham', 'Tooting'))
SQL>
Oracle のドキュメントには、そのオブジェクト リレーショナル機能に特化した本が 1 冊あります。 詳細をご覧ください。
注: ここでオブジェクト テーブルを使用したのは、ネストされたテーブルがどのように機能するかを簡単に説明できるようにするためです。データ ストレージに型を使用することはお勧めしません。OO はプログラミング パラダイムであり、プログラムの作成にのみ使用する必要があります。データは常にリレーショナル構造に保持する必要があります。