(Все это основано на моих очень ограниченных знаниях объектно-реляционной технологии Oracle. Некоторые из них могут быть неправильными, и, вероятно, существует более простой способ сделать это.)
Насколько я понимаю, REF должен указывать на фактическую строку. Вы должны создать некоторые данные, прежде чем вы сможете создать некоторые данные. Поскольку существует так много циклических ссылок, вам придется вернуться позже и обновить все. Но, надеюсь, этого достаточно, чтобы, по крайней мере, начать.
--Create some rows to reference.
insert into campusClub4(cid) values(1);
insert into department4(code) values('A');
--Insert regular columns first.
insert into student4(pid, firstName, lastName, dob, status)
values('10', 'alex', 'smith', to_date('31-MAY-1998', 'DD-MON-YYYY'), 'FRESH');
--Add references with an update.
update student4
set memberOf = (select ref(campusClub) from campusClub4 campusClub where cid = 1)
,major = (select ref(department) from department4 department where code = 'A')
where pid = '10';
--Verify data
select pid, firstname, lastname, dob, status, deref(memberOf), deref(major) from student4;
--This would be a simpler method, but it doesn't work and I don't understand why.
insert into student4(pid, firstName, lastName, dob, status)
values('10', 'alex', 'smith', to_date('31-MAY-1998', 'DD-MON-YYYY'), 'FRESH'
,(select ref(campusClub) from campusClub4 campusClub where cid = 1)
,(select ref(department) from department4 department where code = 'A')
);
Но я настоятельно рекомендую, чтобы вы никогда не делали этого. Вставка данных в таблицу не должна быть такой сложной. Объектно-реляционные базы данных, вероятно, плохая идея. И реализация Oracle это отстой. Вы получите ошибки ORA-600 и «недействительные» таблицы повсюду с этим материалом (например, я только что получил ORA-600 от перекрестного соединения campusClub4 и Department4 с только одним рядом в каждой). И никто не будет знать, как использовать ваши данные.