如何从Oracle 11g中的对象类型列中进行选择?

sni*_*ele 15 oracle select object oracle11g

Hy伙计们,我有两个Oracle对象:

CREATE OR REPLACE TYPE car AS OBJECT( 
name VARCHAR( 80 ) 
) NOT FINAL;
Run Code Online (Sandbox Code Playgroud)

而且,还有另一个目标:

CREATE OR REPLACE TYPE truck UNDER car ( 
doors NUMBER,
seats NUMBER 
);
Run Code Online (Sandbox Code Playgroud)

还有以下表格:

CREATE TABLE vehicles (
id NUMBER NOT NULL,
vehicle car,
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

这是一些数据:

INSERT INTO vehicles ( id, vehicle ) VALUES ( 1, truck( 'ford', 4, 4 ) );
INSERT INTO vehicles ( id, vehicle ) VALUES ( 2, truck( 'toyota', 4, 5 ) );
Run Code Online (Sandbox Code Playgroud)

最后,我的问题是: 如何从车辆表栏中仅选择门的数量和座位数?

我试过以下但它不起作用:

SELECT v.vehicle.doors AS doors AS seats FROM vehicles v;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ORA-00904: "V"."VEHICLE"."DOORS": invalid identifier
Run Code Online (Sandbox Code Playgroud)

只有我可以获得没有任何错误的参数是来自汽车对象的参数.

仅供参考,我在CentOS 6.2上使用Oracle 11g

干杯,博扬

Bob*_*ica 35

您需要使用TREAT函数来获取数据库引擎以将VEHICLE视为TRUCK,如:

SELECT ID, TREAT(vehicle AS TRUCK).DOORS FROM VEHICLES
Run Code Online (Sandbox Code Playgroud)

分享和享受.