Как манипулировать атрибутом объекта в SQL (оракул)? - PullRequest
0 голосов
/ 08 декабря 2018

Предположим, у меня есть эта иерархия:

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 голосов
/ 08 декабря 2018

У вас есть точка с запятой перед 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
...