20

皆さん、次の 2 つの Oracle オブジェクトがあります。

CREATE OR REPLACE TYPE car AS OBJECT( 
name VARCHAR( 80 ) 
) NOT FINAL;

また、別のオブジェクトがあります。

CREATE OR REPLACE TYPE truck UNDER car ( 
doors NUMBER,
seats NUMBER 
);

次の表もあります。

CREATE TABLE vehicles (
id NUMBER NOT NULL,
vehicle car,
PRIMARY KEY (id)
);

ここにいくつかのデータがあります:

INSERT INTO vehicles ( id, vehicle ) VALUES ( 1, truck( 'ford', 4, 4 ) );
INSERT INTO vehicles ( id, vehicle ) VALUES ( 2, truck( 'toyota', 4, 5 ) );

最後に、私の質問は次 のとおりです。車両テーブルの列からドアの数と座席の数のみを選択するにはどうすればよいですか?

私は次のことを試しましたが、うまくいきません:

SELECT v.vehicle.doors AS doors AS seats FROM vehicles v;

次のエラーが発生しました:

ORA-00904: "V"."VEHICLE"."DOORS": invalid identifier

エラーなしで取得できるパラメーターは、車のオブジェクトからのものだけです。

参考までに、CentOS 6.2 で Oracle 11g を使用しています。

乾杯、ボージャン

4

1 に答える 1

48

次のように、TREAT 関数を使用して、データベース エンジンが VEHICLE を TRUCK として扱うようにする必要があります。

SELECT ID, TREAT(vehicle AS TRUCK).DOORS FROM VEHICLES

共有してお楽しみください。

于 2012-04-25T15:38:00.610 に答える