如何在 sql (oracle) 中操作对象的属性?
How to manipulate an attribute of an object in sql (oracle)?
假设我有这个层次结构:
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'));
我如何 select,仅更新 来自代理 table 的单个属性?
我试过了 sql 但没用 :
select infos.fname, infos.lname, infos.adress, infos.phone_num, infos.email,
infos.username, infos.password from agent where id_ag=1;
但是我收到了这个错误:
invalid identifier 00904. 00000 - "%s: invalid identifier"
我错过了什么?
感谢您的回复。
where
前有一个不应该出现的分号。
在访问用户定义的列时,使用 table 前缀应该没问题。
这是您的 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
假设我有这个层次结构:
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'));
我如何 select,仅更新 来自代理 table 的单个属性?
我试过了 sql 但没用 :
select infos.fname, infos.lname, infos.adress, infos.phone_num, infos.email,
infos.username, infos.password from agent where id_ag=1;
但是我收到了这个错误:
invalid identifier 00904. 00000 - "%s: invalid identifier"
我错过了什么?
感谢您的回复。
where
前有一个不应该出现的分号。
在访问用户定义的列时,使用 table 前缀应该没问题。
这是您的 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