嵌套表和对象表_第1页
嵌套表和对象表_第2页
嵌套表和对象表_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌套表嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一个包含部门信息的表,在任何时间内每个部门会有很多工程正在实施。在一个严格的关系模型中,将需要建立两个独立的表department和project。嵌套表允许在department表中存放关于工程的信息。勿需执行联合操作,就可以通过 department表直接访问工程表中的记录。这种不经联合而直接选择数据的能力使得用户对 数据访问更加容易。甚至在并没有定义方法来访问嵌套表的情况下,也能够很清楚地把部门和工程中的数据联

2、系在一起。在严格的关系模型中,department和project两个表的联系需要通过外部关键字(外键)关系才能实现。二、举例说明嵌套表的使用:假设有一个关于动物饲养员的表,希望其中具有他们饲养的动物的信息。用一个嵌套表,就可以在同一个表中存储饲养员和其饲养的全部动物的信息。1、创立类型animal_ty :此类型中,对于每个动物都包含有一个记录,记载了其品种、名 称和出生日期信息。CREATE TYPE an imal_ty AS OBJECT (breed varchar2(25),n ame varchar2(25),birthdate date);2、创立animals_nt :此类型

3、将用作一个嵌套表的根底类型。CREATE TYPE an imals_ nt as table of an imal_ty;3、创立表breeder :饲养员的信息表create table breeder(breeder name varchar2(25),ani mals ani mals_ nt)n ested table ani mals store as ani mals_ nt_tab;4、向嵌套表中插入记录in sert into breedervalues('03y',a nimalsjn t(a nimal_ty('dog','butc

4、h','31-03-97'),an imal_ty('dog','rover','31-03-97'),an imal_ty('dog','julio','31-03-97');in sert into breedervalues('ja ne',a nimals_ nt(a nimal_ty('cat','a n','31-03-97'),an imal_ty('cat','jame&#

5、39;,'31-03-97'),an imal_ty('cat','killer','31-03-97');commit;5、查询嵌套表select n ame,birthdate fromtable(select ani mals from breeder);select n ame,birthdate fromtable(select ani mals from breederwhere breeder name='03y');select breeder name ,n ame,birthdate fromb

6、reeder a,table(a.a ni mals) b同样,三、嵌套表的特点:1、对象复用:如果编写面向对象的代码,就提高了重用以前编写的代码模块的时机。如果创立面向对象的数据库对象,也就提高了数据库对象能够被重用的时机。2、标准支持:如果创立标准的对象,那么它们被重用的时机就会提高。如果有多个应用或 多个表使用同一数据库对象集合,那么它就是既成事实的数据库对象标准。3、定义访问路径:对于每一个对象,用户可定义在其上运行的过程和函数,从而可以使数据和访问此数据的方法联合起来。有了用这种方式定义的访问路径,就可以标准化数据访问的方法并提高对象的可复用性。对象表在Oracle中把对象作为一种数

7、据类型object,不但可以包含根本的 数据类型、集合,还可以为其定义 函数和过程作为其方法。创立格式如下:create or replace type person as object(NAME varchar2 ( 10 ),SEX char ( 2 ),BIRTHDATE date ,|PLACE varchar2 ( 100 );注意:不能在数据类型中定义以下类型:LONG、LONG RAW2. ROWID3. PL/SQL 特定类型(BINARY_INTEGER 、BOOLEAN、TYPE、ROWTYPE)4. 程序包中自定义的数据类型构造函数使用之前创立的对象建立构造函数:decl

8、arepers on_one pers on;beginperson_one:=person('张三','男',date '2021-10-11','杭州');dbms_output.put_li ne(pers on_on e. name);end说明:先创立了一个 perso n类型的局部变量,再为该变量创立了一个实例。在实例化中用到的person是系统的构造函数,可以对person类型变量进行赋值,该构造函数在对象创立 时由系统自动创立,与对象的名称相同。注:创立对象实例时必须提供全部参数,否那么报错。引用对象类型可以创立实

9、例化的对象之后,将该对象插入到堆表中。1、例如创立含有 pers on类型数据的表:create tablet_pers on(pers on _col pers on,emp_idn umber ,dep_idn umber );2、直接插入数据:insert into t_person values(person(' 张三 ',' 男 ',date'2021-10-11',' 杭州'),12345, 11 );commit ;3、也可以在PL/SQL中先创立保存实例的变量,再进行插入:declarepers on_one pe

10、rs on;begin);pers on_on e:=pers on(李四,男,date '2021-10-20'上海12345, 11 );insert in tot_pers onvalues(pers on_mit ;end ;4、之后可进行查询数值:SQL > select * from t_person;PERSON_COL( NAME , SEX, BIRTHDATE, PLACE)EMP_IDDEP_ID1234512345PERSON(' 张三','男','11-OCT-08',' 杭州

11、')11PERSON('李四','男','20-OCT-08','上海')115、 假设需要查询对象中的某个变量,那么必须在最前面加上表名:SQL > selecta.person_col.NAMEfrom t_person a;PERSON_COL.NAME张三李四注:当在某表中参加对象后,对象在table被drop之前不能被drop。方法方法:实例方法、类方法、构造函数、映射方法、排序方法1、实例方法和类方法实例方法是必须创立实例后才可以调用的方法,而类方法可以在创立实例前调用。实例方法用member 声明,类方

12、法用 static仓U建 type 和口 type body :create or replacetype pers onas object(NAME varchar2(10 ),SEX char ( 2 ),BIRTHDATE dateJ|PLACE varchar2(100 ),|member procedurecha ng_n ame(name varchar2),|staticfun cti onnew (v_namevarchar2,v_sexvarchar2)returnpers on);create or replacetype body person ismember proc

13、edurechang_name( name varchar2) isbegin|:=name ;end chang_name;returnstatic function new (v_name varchar2 ,v_sex varchar2 )pers onisbeginnull , null );retur n(pers on(v_n ame,v_sex.end newend ;在过程中调用两种不同类型的方法:declarepers on_one pers on;pers on_ two pers on;beginperson_one:=person('李四,男,

14、date '2021-10-20','上海);-创立实例person_one.chang_name(' 王五');dbms_output.put_li ne(pers on_on e. name);person_two:=person.new('小张',' 女');- 可直接调用dbms_output.put_li ne(pers on_ two. name);end ;2、映射方法由于将对象作为字段时,对象中包含很多参数须发进行比拟,此时可以为对象创立映射方法。在创立映射方法后,如果用到where 或order by 以

15、及 <>=等比拟关系时,自动调用映射方法。注:映射方法不带参数,且只能有一个。仓U建 type 禾口 type body :create or replace typepersonas object(NAME varchar2 ( 10 ),SEX char ( 2 ),BIRTHDATE date ,PLACE varchar2 ( 100 ),map member functioncompare return date);create or replace type body person ismap member functioncompare return date isb

16、eginretur nself.birthdate;end compare;end ;调用映射方法进行比拟:declarepers on_one pers on;pers on_ two pers on;begin上海杭州person_one:=person('李四,男,date '2021-10-20'');person_two:=person(' 小张, 女,date '2021-10-11'');if pers on_one > pers on _twothe ndbms_output.put_line(person_

17、|'比'|person_|' 大 ');elsifpers on_one < pers on _twothe ndbms_output.put_line(person_|'比'|person_|' 大 ');else dbms_output.put_line(' 一样大');end if ;end ;3、排序方法排序方法主要为了简化比拟对象大小的值,相当于sign举例说明,创立 type 和type body :create or replace

18、 type person as object(NAME varchar2 ( 10 ),SEX char ( 2 ),BIRTHDATE date ,|PLACE varchar2 ( 100 ),in tegerin tegerisorder member functionmatch(p_person person)return);create or replace type body person isorder member functionmatch(p_person person)returnbeginif self.birthdate > p_pers on .birthdatethe nreturn 1 ;elsif self.birthdate < p_pers on .birthdatethe nreturn - 1 ;else return 0 ;end ifend match;end ;调用排

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论