`
jeelee
  • 浏览: 629017 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle学习笔记(第十三章:自定义数据类型)

阅读更多
---------------------用Oracle Object Option(Oracle对象选件)获得新型数据类型
---------------------Oracle Object Option(Oracle对象选件)是Oracle8服务器的一个可选组件﹐必须具备
---------------------该组件才能使用以下数据类型﹕<1>.对象数据类型;<2>.嵌套表;<3>VARRAY(数组);<4>.REF
---------------------Oracle8 Object Option 提供了一个新语句﹕Create Type﹐用它可以创建一个新数据类型
---------------------以后在创建表或另一个数据类型时可以使用它
--﹕创建一个新数据类型
Create Type v_new_datatype as Object
(
building varchar2(10),
room varchar2(10),
layout int
);
--创建一个含有新型数据类型的表
Create Table table_new_datatype
(
room_id varchar2(10),
room_name varchar2(10),
location v_new_datatype
);
--一个对象时由属性(为它定义的列)和方法(处理对象的函数和过程及其返回信息)构成
--在默认的情况下﹐Oracle为每个对象创建一个构造器(constructor)方法﹐这个构造器方法
--可以创建一个对象实例﹐当你为对象列指定一个值时﹐必须用这个构造器方法﹐它包含对象类型名﹐
--其后跟着圆括号括起来的属性值
--例子﹕用构造器方法为对象数据指定一个值
insert into table_new_datatype
(room_id,room_name,location)
values
('1002','room2',v_new_datatype('building2','room2',20));
--一旦创建了一个含有对象列的表﹐就可以使用select语句从对象列检索一个值﹐但是必须指定要检索的每个对象的属性
--例子﹕用对象列的名称修饰属性(列)
SELECT * FROM table_new_datatype;
select location.building,location.room from table_new_datatype; --不能执行﹖
select room_id,location from table_new_datatype;
SELECT location from table_new_datatype;

嵌套表:
嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一个包含部门信息的表,在任何时间内每个部门会有很多项目正在实施。在一个严格的关系模型中,将需要建立两个独立的表department和project。
  嵌套表允许在department表中存放关于项目的信息。勿需执行联合操作,就可以通过department表直接访问项目表中的记录。这种不经联合而直接选择数据的能力使得用户对数据访问更加容易。甚至在并没有定义方法来访问嵌套表的情况下,也能够很清楚地把部门和项目中的数据联系在一起。在严格的关系模型中,department和project两个表的联系需要通过外部关键字(外键)关系才能实现。
嵌套表的特点:
1、对象复用:如果编写面向对象的代码,就提高了重用以前编写的代码模块的机会。同样,如果创建面向对象的数据库对象,也就提高了数据库对象能够被重用的机会。
2、标准支持:如果创建标准的对象,那么它们被重用的机会就会提高。如果有多个应用或多个表使用同一数据库对象集合,那么它就是既成事实的数据库对象标准。
3、定义访问路径:对于每一个对象,用户可定义在其上运行的过程和函数,从而可以使数据和访问此数据的方法联合起来。有了用这种方式定义的访问路径,就可以标准化数据访问的方法并提高对象的可复用性。

-- 现创建一个学生信息成绩表Stu_Sco:包括学生信息和年月成绩,
-- 有如下字段:学号:stu_no,姓名:stu_nm,性别:sex,年龄:age和成绩嵌套表
-- 成绩嵌套表Score有如下字段:年月:ym,中文:CN,英语:EN,数学:MT
-- 现创建嵌套表 Score
Create Type Score_type as Object
(
YM CHAR(6),
CH number(4,2),
EN number(4,2),
MT number(4,2)
);
--创建新数据类型的表
Create Type Score_Tab as table of Score_type;
--创建一个具有嵌套表的嵌套表
create table Stu_Sco
(
stu_no varchar2(5) PRIMARY KEY,
stu_nm varchar2(10) NOT NULL,
sex CHAR(1),
age INT,
score Score_Tab        --必须指定一个标识过的存储表
)NESTED TABLE score STORE AS stu_score_tab;

-- 写入数据
INSERT INTO stu_sco(stu_no,stu_nm,sex,age,score)
VALUES('00001','jake','1',22,Score_Tab(Score_type('200801',80,76,88),
                                       Score_type('200802',78,77,90),
                                       Score_type('200804',55,79,85))) ;
                                      
INSERT INTO stu_sco(stu_no,stu_nm,sex,age,score)
VALUES('00002','lucy','0',21,Score_Tab(Score_type('200801',81,71,88),
                                       Score_type('200802',79,73,90),
                                       Score_type('200804',8,79,75))) ;                                      

-- 查询
SELECT * FROM stu_sco; 
 
SELECT ch FROM TABLE(SELECT score FROM stu_sco WHERE stu_no='00001');

SELECT * FROM TABLE(SELECT score FROM stu_sco WHERE stu_no='00001') WHERE ym='200801';

SELECT a.stu_no,b.ym,b.ch,b.en,b.mt FROM stu_sco a,(SELECT * FROM TABLE(SELECT score FROM stu_sco WHERE stu_no='00001')) b
WHERE a.stu_no='00001';
                                 
可变数组 :
  可变数组与嵌套表相似,也是一种集合。一个可变数组是对象的一个集合,其中每个对象都具有相同的数据类型。可变数组的大小由创建时决定。在表中建立可变数组后,可变数组在主表中作为一个列对待。从概念上讲,可变数组是一个限制了行集合的嵌套表。
  可变数组,允许用户在表中存储重复的属性。例如:假设用户有一个project表,并在项目中指定了工作人员,一个项目可以有多个工人,而一个工人也可以为多个项目工作。在严格的关系模型中,用户可以创建一个project表,一个worker表和存储它们之间关系的交叉表project_worker。
  用户可使用可变数组在project表中存储工人的名字。如果项目限定的工人数不超过10人,可以建立一个以10个数据项为限的可变数组。接下来就可处理此可变数组,从而对于每一个项目,可以选取其中所有工人的名字,而勿需查询表worker。
--举例说明可变数组的使用:
--1、创建类型comm_info
CREATE TYPE comm_info AS OBJECT ( --此类型为通讯方式的集合
            no number(3), --通讯类型号
            comm_type varchar2(20), --通讯类型
            comm_no varchar2(30)); --号码

--2、创建可变数组comm_info_list
CREATE TYPE comm_info_list AS VARRAY(50) OF comm_info;

--3、创建表

create table user_info(user_id number(6), -- 用户ID号
                       user_name varchar2(20), -- 用户名称
                       user_comm comm_info_list); -- 与用户联系的通讯方式

--4、向可变数组插入记录
INSERT into user_info
VALUES(1,'mary',comm_info_list(comm_info(1,'手机','13651401919'),
                               comm_info(2,'呼机','12812345637'),
                               comm_info(3,'tele','23232323233')));

insert into user_info
VALUES(2,'carl',comm_info_list(comm_info(1,'手机','13901018888'),
                               comm_info(2,'呼机','1281234567')));

commit;

--5、查询可变数组
SELECT user_comm from user_info
WHERE user_id=1;

select comm_type,comm_no
FROM table(select user_comm from user_info
WHERE user_id=1)
WHERE no=1;

与一位用户联系的方式有很多种,比如:手机、呼机、座机等。在一个严格的关系模型中,将需要两个独立的表:用户信息和通讯方式,而在可变数组中,允许在表user_info中直接访问用户的联系方式,这种不经联合而直接选择数据的能力使得用户对数据的访问更加容易。
可变数组的特点:
1、对象复用:如果编写面向对象的代码,就提高了重用以前编写的代码模块的机会。同样,如果创建面向对象的数据库对象,也就提高了数据库对象能够被重用的机会。
2、标准支持:如果创建标准的对象,那么它们被重用的机会就会提高。如果有多个应用或多个表使用同一数据库对象集合,那么它就是既成事实的数据库对象标准。
3定义访问路径:对于每一个对象,用户可定义在其上运行的过程和函数,从而可以使数据和访问此数据的方法联合起来。有了用这种方式定义的访问路径,就可以标准化数据访问的方法并提高对象的可复用性。


分享到:
评论

相关推荐

    ORACLE数据库体系架构视频教程详细完整版

    第十三章:数据库审计 audit 第十四章:数据装载 SqlLoader 第十五章:Oracle 网络 第三部分:管理Oracle数据库 第十六章:Oracle ASM 管理 第十七章:逻辑备份与恢复 第十八章:物化视图。 由于文件过大,只提供...

    Oracle学习笔记精华版

    Oracle学习笔记精华版Oracle学习笔记精华版Oracle学习笔记精华版Oracle学习笔记精华版

    Oracle学习笔记

    Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记

    oracle 个人学习笔记

    oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记

    Oracle学习笔记 Oracle学习笔记

    Oracle非常有用的笔记。。。。。。。。。。。Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记

    oracle11g

    第十三章:视图 第十四章:同义词 第十五章:序列 第三部分:SQL语言的扩展 第十六章:INSERT语句总结 第十七章:DML和DDL语句的其他用法 第十八章 通过GROUP BY产生统计报告 第十九章:ORACLE分层查询 第二十...

    oracle学习笔记 oracle学习笔记

    oracle学习笔记 oracle学习笔记oracle学习笔记 oracle学习笔记

    Oracle学习笔记 PDF

    本文档主要是网易云李兴华老师进行授课时所作笔记,从Oracle11g数据库的安装到复杂查询做了详细的文档记录。

    Oracle学习笔记.pdf

    oracle学习笔记,包含所有oracle概念,包,函数,oracle的组成,oracle的plsq,oracle的存储过程,oracle的事务等

    Oracle学习笔记-日常应用、深入管理、性能优化

    资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...

    Oracle学习笔记.doc

    Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...

    oracle学习笔记-入门基础

    oracle学习笔记-入门基础-01-张园

    Oracle数据库之C#中调用示例Oracle自定义类型(自定义Object对象)

    C#调用Oracle自定义类型存储过程,Oracle存储入参为type类型,对于不熟悉Oracle朋友,可以参考来调用。实现思路和正常调MSSQL一样,先建立连接,再定义一个IOracleCustomType的类,然后Oracle.DataAccess.dll的...

    ORACLE学习笔记:日常应用、深入管理、性能优化.part1/2

    ORACLE学习笔记:日常应用、深入管理、性能优化.part1

    Oracle 架构和管理.ppt

    第一章:Oracle的架構 第二章:Oracle的執行 第三章:管理Oracle 第四章:建立資料庫 第五章:建立Data ...第十三章:Export and Import的使用 第十四章:Users的管理 第十五章:權限的管理 第十六章:Roles的管理

    韩顺平oracle学习笔记.pdf

    分享给需要的朋友们韩顺平oracle学习笔记.pdf 大家来下载吧!

    Oracle数据库精讲之数据库管理_ Oracle数据库管理视频

    第十三讲:oracle index管理 第十四讲:oracle Partitioned Tables and Indexes管理 第十五讲:oracle view管理 第十六讲:oracle sequences管理 第十七讲:oracle 触发器管理 第十八讲:oracle 用户管理 第十九讲:...

Global site tag (gtag.js) - Google Analytics