`
jeelee
  • 浏览: 637652 次
  • 性别: 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视频笔记

    - **数据类型**:Oracle支持多种数据类型,包括数值型(NUMBER)、字符型(VARCHAR2, CHAR)、日期型(DATE)等。 - **创建表**:使用`CREATE TABLE table_name (column_name data_type constraints);`语句。 - **删除表**...

    Java开发详解.zip

    010301_【第3章:Java基础程序设计】_Java数据类型笔记.pdf 010302_【第3章:Java基础程序设计】_运算符、表达式与语句笔记.pdf 010303_【第3章:Java基础程序设计】_判断与循环语句笔记.pdf 010401_【第4章:数组与...

    Oracle数据库课堂笔记

    游标用于逐行处理查询结果,复合类型允许创建自定义数据结构,包则将相关过程和变量封装在一起,提高代码复用性和模块化。 以上就是Oracle数据库系列课程的主要内容,涵盖了数据库的基础概念、管理、查询和编程等多...

    Oracle学习笔记

    以下是一些Oracle学习笔记中的关键知识点: 1. **远程访问Oracle数据库**:你可以通过URL `http://127.0.0.1:5560/isqlplus/` 来访问Oracle数据库,不论是自己的还是他人的,这表明Oracle提供了Web接口来操作数据库...

    Java/JavaEE 学习笔记

    Oracle学习笔记...............121 前言....................................121 第一章 Selecting Rows.....................124 第二章 Limiting Selected Rows.......127 第三章 Single Row Functions.............

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    学习笔记之Oracle教程(免费).pdf--超详细

    - **自定义数据类型**:介绍了如何创建和使用自定义的数据类型。 #### Oracle体系结构 - **DBA角色**:描述了DBA在数据库管理中的职责和权限。 - **数据库结构**:详细介绍了Oracle数据库的物理和逻辑结构。 ####...

    J2EE学习笔记(J2ee初学者必备手册)

    Oracle学习笔记...............121 前言....121 第一章 Selecting Rows.....................124 第二章 Limiting Selected Rows.......127 第三章 Single Row Functions..........127 第四章 Displaying Data from ...

    传智播客JPA学习笔记.pdf

    JPA提供了对不同数据类型的映射,如日期类型(@Temporal),枚举类型(@Enumerated),甚至自定义类型,通过Converter接口可以自定义数据类型转换。 **6. 大数据字段映射与字段延迟加载** 大数据字段如CLOB或BLOB的...

    18天java学习之经典笔记

    - 变量和数据类型:讲解基本数据类型(整型、浮点型、字符型、布尔型)及引用数据类型(类、接口、数组)。 - 运算符:覆盖算术、关系、逻辑、位和赋值运算符。 - 控制流程:介绍if语句、switch语句、循环(for、...

    Oracle PL SQL Programming 第五版-带书签目录超清文字版

    1. **PL/SQL基础知识**:介绍PL/SQL的基本语法,包括变量声明、常量定义、数据类型、运算符、控制结构(如IF-THEN-ELSIF、CASE、循环)以及异常处理机制。 2. **PL/SQL块结构**:讲解如何构建声明部分、执行部分和...

    Java JDK 6学习笔记——ppt简体版

    3. **语法基础**:Java的基础语法包括数据类型(如整型、浮点型、字符型和布尔型)、变量、运算符、控制结构(如if语句、switch语句、for循环、while循环)、流程控制(如break和continue)、方法和类的定义。...

    note:Java学习笔记

    3. **基本语法**:包括数据类型(如整型、浮点型、字符型和布尔型)、变量声明、运算符、流程控制(if语句、switch语句、循环结构)等。 4. **类和对象**:面向对象编程的基础,讲解类的定义、对象的创建、封装、...

    java 0 基础课堂笔记.zip

    2. **基本语法**:包括数据类型(如整型、浮点型、字符型、布尔型)、变量声明、常量定义、运算符(算术、比较、逻辑、位操作等)、流程控制(if-else、switch、for、while循环,以及break和continue语句)。...

    aardio编程问题集锦与实战

    - `type 关键函数`: 用于获取对象的数据类型。 - `eval`: 执行一个字符串表达式。 **去除收尾空格的方法:** - 在 aardio 中,可以通过字符串方法来实现去除字符串两端的空白字符。虽然原文中没有提供具体的方法...

    Java大学生基础笔记(含代码)

    - **数据类型**:Java分为两大类数据类型,即基本数据类型(如int、char、boolean等)和引用数据类型(如类、接口、数组)。 - **变量**:存储数据的容器,声明时需指定类型和名称。 - **运算符**:包括算术、...

    Java学习笔记-个人整理的

    {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}{24}{subsubsection.1.4.1.1} {1.4.2}格式化输出浮点数}{24}{subsection.1.4.2} {1.4.3}\texttt {char}}{24...

    TOAD使用笔记 经典 实用

    【TOAD使用笔记 经典 实用】 TOAD(Tool for Oracle Application Developers)是一款强大的数据库开发工具,尤其适合Oracle数据库的管理和开发。本笔记将详细阐述TOAD的一些实用技巧和功能,帮助用户提升工作效率。...

    certificacao_oracle_javase11

    1. **基础语法**:包括变量、数据类型、运算符、控制流(如if语句、switch、for和while循环)、类、对象、包和异常处理。 2. **函数式编程**:Java 8引入了Lambda表达式和函数接口,Java 11进一步增强了这一特性,...

Global site tag (gtag.js) - Google Analytics