用对象-关系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')));