用對象-關係SQL完成如下內容:
1) 創建一個自定義數據類型,代替ClassInfo表中的classTimePlace字段,包含屬性有:上課起始時間、上課結束
時間、上課地點。
2) 創建一個ClassInfoTemp表,包含ClassInfo裏的所有字段(其中classTimePlace字段的類型用自定義類型代替)
3) 往上面這個表中插入2-5行記錄,並根據上課地點查詢該表所有記錄。
4) 因爲一門課一週可能有幾次課,我們需要設計一個彙集類型的數據表來存放一門課的所有上課時間地點信息
(包含內容同1),然後創建ClassInfo2表,其中classTimePlace字段的作爲一個表類型列,可以包含多條上課時間
地點記錄。實驗要求:建立這樣的ClassInfo2表 。
5) 往上表中插入若干條記錄,每一條classinfo記錄中有1-2條classTimePlace信息。
參考:
http://hi.baidu.com/420350501/blog/item/59730267ec1d8c6e0c33faa3.html
http://infolab.stanford.edu/~ullman/fcdb/oracle/or-time.html
http://www.cnblogs.com/jennybackup/archive/2009/12/27/1633674.html
答案:
1 首先創建一個數據類型
create type ClassInfoType as object
(startTime date,
endTime date,
place VarChar2(128))
2 創建表
CREATE TABLE ClassInfoTemp
(
classID Number(10,0) NOT NULL,
className Varchar2(32),
teacherID Char(18) NOT NULL,
courseID Char(8) NOT NULL,
classYear Char(6) NULL,
classTimePlace ClassInfoType NULL
3插入數據 並查詢
insert into
ClassInfoTemp values(1,'english','001','001','2011',ClassInfoType (to_date('2011/05/31:11:00:00 上午', 'yyyy/mm/dd:hh:mi:ssam'),to_date('2011/05/31:12:00:00
上午', 'yyyy/mm/dd:hh:mi:ssam'),'building1'));
insert into ClassInfoTemp values(2,'chinese','002','002','2011',ClassInfoType (to_date('2011/05/25:11:00:00
上午', 'yyyy/mm/dd:hh:mi:ssam'),to_date('2011/05/25:12:00:00 上午', 'yyyy/mm/dd:hh:mi:ssam'),'building1'));
//不可以使用*會出錯
select c.classID, c.className ,c.classTimePlace.place from ClassInfoTemp c where c.classTimePlace.place = 'building1'
4創建 彙集類型 和表
//create type ClassTimeArray as array(5) of VarChar2(128);
create type classTimePlace_t as table of ClassInfoType
CREATE TABLE ClassInfo2
(
classID Number(10,0) NOT NULL,
className Varchar2(32),
teacherID Char(18) NOT NULL,
courseID Char(8) NOT NULL,
classYear Char(6) NULL,
classTimePlace classTimePlace_t NULL
)nested table classTimePlace store as classTimePlace_tab
5插入信息
insert into ClassInfo2 values(1,'english','001','001','2011',classTimePlace_t(
ClassInfoType(to_date('2011/05/25:11:00:00 上午', 'yyyy/mm/dd:hh:mi:ssam'),to_date('2011/05/25:12:00:00 上午','yyyy/mm/dd:hh:mi:ssam'),'building1'),
ClassInfoType(to_date('2012/05/25:11:00:00 上午', 'yyyy/mm/dd:hh:mi:ssam'),to_date('2012/05/25:12:00:00 上午','yyyy/mm/dd:hh:mi:ssam'),'building2')));