如何在SQL(Oracle)中操纵对象的属性?

时间:2018-12-07 21:41:42

标签: sql oracle11g user-defined-types

假设我具有此层次结构:

create or replace type tperson as object(
    fname varchar2(20),
    lname tprenom,
    adress tadr,
    phone_num varchar2(10),
    email varchar2(50)
)not final;

create or replace type tuser under tperson(
    username varchar2(20),
    password varchar2(20)
);

create table agent(
id_ag int,
infos tuser not null
);

insert into agent values(1,tuser('name',tprenom('bilel','dani','lastname3')  
,tadr(3,'ain delfa','miliana','hammama',20), 
'2140547854','email@gmail.com','username','password'));

我怎么只能从代理表中选择,更新一个属性?

我已经尝试过该sql了,但是没有用:

select infos.fname, infos.lname, infos.adress, infos.phone_num, infos.email, 
infos.username, infos.password from agent where id_ag=1;

但是我遇到了这个错误:

  

无效的标识符00904。00000-“%s:无效的标识符”

我想念什么?

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

where前面有一个分号,该分号不应该出现在分号上。

在访问用户定义的列时,请使用表前缀,您应该没事。

这是SELECT查询的语法:

select 
    ag.infos.fname,
    ag.infos.lname,
    ag.infos.adress, 
    ag.infos.phone_num, 
    ag.infos.email, 
    ag.infos.username, 
    ag.infos.password 
from agent ag
where ag.id_ag = 1;

如果您要执行UPDATE

update agent ag
set ag.infos.fname = 'foo', ag.infos.lname = 'bar'
where ag.infos.id_ag = 1