Вы не можете ссылаться на один аэропорт в вашей модели.Для ссылки на объект вам нужен идентификатор объекта.Вложенные таблицы не могут иметь OID.См. Ограничения относительно oid_clause
в nested_table_col_properties .
Вот пример модели, которая позволяет ссылаться на отдельные аэропорты.
Модель
CREATE TYPE AirportType AS OBJECT(
code VARCHAR2(10),
the_size INTEGER
);
/
CREATE TYPE AirportListType AS TABLE OF REF AirportType;
/
CREATE TYPE CityType AS OBJECT(
name VARCHAR2(30),
airports AirportListType
);
/
CREATE TABLE airports of AirportType (code PRIMARY KEY);
CREATE TABLE city OF CityType
NESTED TABLE airports STORE AS city_airports;
Данные
INSERT INTO airports VALUES(AirportType('LHR', 999));
INSERT INTO airports VALUES(AirportType('LCY', 888));
INSERT INTO airports VALUES(AirportType('ZHR', 777));
INSERT INTO city VALUES(
CityType(
'London',
AirportListType(
(select ref(a) from airports a where code = 'LHR'),
(select ref(a) from airports a where code = 'LCY')
)
)
);
COMMIT;
Запрос
SELECT a.column_value AS airport_ref
FROM city c, table(c.airports) a
WHERE deref(a.column_value).code = 'LHR';
Результат
AIRPORT_REF
--------------------------------------------------------------------------------
2202086CEE381BDAB100DFE053020011AC9C4C6CEE381BDAAF00DFE053020011AC9C4C