2010-10-28 53 views
1

我是Oracle新手,我真的不清楚如何做到這一點。如何將數據插入到具有其他引用的對象表中?

數據庫是這個...

CREATE OR REPLACE TYPE personUdt4 AS OBJECT(
pid varchar(11), 
firstName varchar(20), 
lastName varchar(20), 
dob date) 
NOT FINAL; 
/

CREATE OR REPLACE TYPE locationUdt4 AS OBJECT( 
street varchar(30), 
bldg varchar(5), 
room varchar(5)) 
NOT FINAL; 
/

CREATE TYPE departmentUdt4; 
/
CREATE TYPE studentUdt4; 
/
CREATE TYPE facultyUdt4; 
/

CREATE OR REPLACE TYPE campusClubUdt4 AS OBJECT( 
cId number, 
name varchar(50), 
location locationUdt4, 
phone varchar(12), 
advisor REF facultyUdt4, 
members REF studentUdt4) 
NOT FINAL; 
/

CREATE OR REPLACE TYPE facultyUdt4 UNDER personUdt4(
rank varchar(10), 
advisorOf REF campusClubUdt4, 
worksIn REF departmentUdt4, 
chairOf REF departmentUdt4) 
NOT FINAL; 
/

CREATE OR REPLACE TYPE studentUdt4 UNDER personUdt4( 
     status varchar(10), 
     memberOf REF campusClubUdt4, 
     major REF departmentUdt4) 
NOT FINAL; 
/
CREATE OR REPLACE TYPE studentUdtList4 AS VARRAY(1000) of studentUdt4; 
/

CREATE OR REPLACE TYPE facultyUdtList4 AS VARRAY(50) of facultyUdt4; 
/

CREATE OR REPLACE TYPE departmentUdt4 AS OBJECT( 
code varchar(3), 
name varchar(40), 
deptChair REF facultyUdt4, 
     MEMBER FUNCTION getStudents RETURN studentUdtList4, 
MEMBER FUNCTION getFaculty RETURN facultyUdtList4) 
NOT FINAL; 
/
CREATE TYPE BODY departmentUdt4 as 
    member function getStudents return studentUdtList4 
    end func; 

    member function getFaculty return facultyUdtList4 
    end func; 
end; 
/


CREATE TABLE person4 OF personUdt4(
primary key (pid)); 
/

CREATE TABLE faculty4 OF facultyUdt4; 
/

CREATE TABLE student4 OF studentUdt4; 
/

CREATE TABLE department4 OF departmentUdt4( 
primary key (code)); 
/

CREATE TABLE campusClub4 OF campusClubUdt4(
     primary key (cid) 
); 

INSERT INTO student4 
(pid, firstname, lastname, dob, status, memberOf, major) 
VALUES 
('10','alex','smith','31-may-98','FRESH', '10', '11'); 

COMMIT; 

這將是巨大的,如果有人能幫助我d:

+2

您是否需要使用對象類型?爲什麼不創建普通的關係表? – 2010-10-28 06:24:53

+0

是的,我必須,我正在研究關於對象關係數據庫,我試圖練習。 – Alex 2010-10-28 06:51:59

+2

你在學什麼,歷史? ;-) – 2010-10-28 08:21:29

回答

1

(這是所有基於我很有限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交叉加入,每個只有一行)。沒有人會知道如何使用您的數據。

+0

+1「沒有人會知道如何使用您的數據!」 – abhi 2011-11-17 22:11:33

相關問題