Oracle - объектно-реляционная БД (вставьте подтип INTO с помощью Ref для другого объекта) - PullRequest
1 голос
/ 08 ноября 2011

В основном у меня есть супертип (Person) и подтип (Student). Я должен вставить в person_objtab объект студента. У объекта person есть таблица REF to Address, и когда я пытаюсь добавить нового студента, он выдает ошибку «отсутствует выражение». Вот код, любая помощь высоко ценится!

create type address_objtyp as object (
    Line1 varchar2(30),
    Line2 varchar2(30),
    Line3 varchar2(30),
    Postcode varchar2(10),
    Country varchar2(20)
)
/

create type person_objtyp as object (
    NI varchar2 (20),
    Name varchar2(30),
    Address REF address_objtyp,
    Phone varchar2(30)
)
NOT FINAL
/

CREATE type student_objtyp UNDER person_objtyp (
    Dept_id varchar2(10),
    Course varchar2(10),
    StuYear number,
    Total_credits number
)
/

create table address_objtab of address_objtyp;
create table person_objtab of person_objtyp;

INSERT INTO address_objtab VALUES(
address_objtyp('9',  'Bell', 'Lancashire', ' BB52 4GF', 'the UK')
)
/

Это утверждение не выполняется:

INSERT INTO Person_objtab values 
 (student_objtyp 
     (SELECT  2222, 'Jo', REF(aa), '0161 0450 452', '10', 'Computing', '2', 220 
       FROM address_objtab aa
      WHERE aa.postcode = ' BB52 4GF')
)
/

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011
INSERT INTO person_objtab 
VALUES (student_typ(
        2222,
        'Jo',
        (SELECT REF(b) FROM address_objtab b WHERE line1 = '9 Bell'),
         '01200 233 233',
         10,
         'Computing',
         2,
         220
));
0 голосов
/ 29 ноября 2011

вы смешиваете синтаксис немедленной вставки значения и результирующего набора, и конструктор объекта должен находиться внутри предложения select - попробуйте

INSERT
  INTO Person_objtab (
           SELECT student_objtyp( 2222, 'Jo', REF(aa), '0161 0450 452', '10', 'Computing', '2', 220)
             FROM address_objtab aa 
            WHERE aa.postcode = ' BB52 4GF'
       )
     ;

вместо этого. С уважением, Карстен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...