#sql #database #oracle
#sql #База данных #Oracle
Вопрос:
В принципе, у меня есть супертип (Person) и подтип (Student). Я должен вставить в person_objtab объект student. Объект person имеет ссылку на таблицу адресов, и когда я пытаюсь добавить нового ученика, это выдает ошибку «отсутствует выражение». Вот код, любая помощь высоко ценится!
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')
)
/
Ответ №1:
вы смешиваете синтаксис вставки немедленного значения и результирующего набора, и конструктор объекта должен находиться внутри предложения 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'
)
;
вместо этого. с уважением, Карстен
Комментарии:
1. это сработало в моей тестовой настройке — но спасибо за подсказку, я проверю.
Ответ №2:
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
));