web-dev-qa-db-ja.com

Oracle:テーブルをオブジェクトタイプudtで更新する

私はこのOracleコードを持っています:

Create type address_ty as object( street varchar2(50),city varchar2(50),prov varchar2(50),cap number);

Create type person_ty as object( name varchar2(50), address address_ty);

Create table client (client_id number,person person_ty);

insert into client
values(1,person_ty('pinco pallo',
         address_ty('Boulevard street' ,'torino','to',10100)));
Commit;

select c.client_id,
     c.person.name,
     c.person.address.street,
     c.person.address.city,
     c.person.address.prov,
     c.person.address.cap
from client c;

すべてうまくいきます。

今私はc.person.address.provを更新したいです

私が試した:

update client
set client.person.address.prov='MI'
where client.client_id=1

しかし、エラーが発生します。

Ora-00904: "client.person.address.prov"識別子が無効です。

どうすればフィールドプロブを更新できますか?

お返事ありがとうございます。

2
andrea

エイリアスを使用します。オブジェクトタイプでテーブルを更新する場合は必須です。 [〜#〜]更新[〜#〜]

t_alias

ステートメントの他の場所で参照されるテーブル、ビュー、またはサブクエリの相関名(エイリアス)を指定します。 このエイリアスは、DML_table_expression_clauseがオブジェクトタイプ属性またはオブジェクトタイプメソッドを参照する場合に必要です。

Create table client (client_id number,person person_ty);

insert into client 
values(1,person_ty('pinco pallo',
         address_ty('Boulevard street' ,'torino','to',10100)));
Commit;

...

update client c
set c.person.address.prov='MI'
where c.client_id=1;

1 row updated.
2
Balazs Papp