Oracle使用TABLE(...)和对象类型缺少右括号

时间:2018-05-22 12:44:55

标签: sql oracle

我试图在嵌套表中获取元组的引用,但是我收到了错误,

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
);

这是我创建城市表的方式:

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

插入的一个例子:

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

1 个答案:

答案 0 :(得分:0)

您无法在模型中引用单个机场。要引用对象,您需要一个对象标识符。嵌套表不能有OID。请参阅nested_table_col_properties中有关oid_clause的限制。

这是一个允许引用单个机场的模型示例。

模型

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