В Oracle отсутствуют правильные скобки с использованием TABLE (...) и типов объектов - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь получить ссылку на кортеж во вложенной таблице, но получаю ошибку,

ORA-00907: missing right parenthesis

Вот что я делаю:

SELECT REF(VALUE(a))
FROM CITY c, TABLE(c.airports) a
WHERE a.code = 'LHR';

Типы, которые я определил:

CREATE TYPE AirportType AS OBJECT(
    Code varchar2(10),
    Size int
);

CREATE TYPE AirportListType AS TABLE OF AirportType;

CREATE TYPE CityType AS OBJECT(
    Name varchar2(30),
    Airports AirportListType
);

Вот как я создаю таблицу City:

CREATE TABLE CITY OF CityType
    NESTED TABLE Airports STORE AS Airport_Tab;

Пример вставки:

INSERT INTO CITY VALUES(CityType('London', AirportListType(AirportType('LHR', 999))));

1 Ответ

0 голосов
/ 24 мая 2018

Вы не можете ссылаться на один аэропорт в вашей модели.Для ссылки на объект вам нужен идентификатор объекта.Вложенные таблицы не могут иметь 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...