Oracle8 对象关系数据库_第1页
Oracle8 对象关系数据库_第2页
Oracle8 对象关系数据库_第3页
Oracle8 对象关系数据库_第4页
Oracle8 对象关系数据库_第5页
已阅读5页,还剩132页未读 继续免费阅读

下载本文档

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

文档简介

1、Oracle8 对象关系数据库高端数据据库-提提高DBMS管理上限限Oracle8对象关系系数据库库扩充的类类型系统统对象关系系数据库库Oracle8数据库系系统一、高端端数据库库-提高高DBMS管理上限限oracle7oracle8数据库大大小32TB512KTB数据文件件个数1-4K64-256M每表包含含列数数2541000每表的LOB列数1long1000CHAR长度2542000VARCHAR长度20004000索引列数数1632支持上万万个并发发用户多线程服服务器(用少量量的服务务器端进进程管理理大量的的客户端端用户。Net8(SQL*net)连接管理理器连连接池(TNS资源)、多

2、路传传输、应应用请求求集中化化更有效地地使用网网络资源源避免操作作系统对对服务器器网络连连接数的的限制客户端(服务器器)服服务务器一、高端端数据库库-提高高DBMS管理上限限网络层透明网络络底层协议适配配器二、扩充充的类型型系统-对象关系系数据库库关系模型型与对象象模型新的数据据类型-对象(记录)类型对象表面向对对象数据据库设计计收集类型型(数组组与嵌套套表)对象与视视图数据库新新的应用用领域计算机辅辅助设计计CAD数据库必必须存储储和处理理与工程程设计相相关的数数据(产产品部件件及相互互关系、设计版版本)计算机辅辅助软件件工程数据库中中存储软软件开发发人员用用到的各各种数据据,包括括源代码码

3、、模块块之间依依赖关系系、变量量定义、文档多媒体数数据库声音、视视频、图图象办公信息息系统超文本数数据库应用需要要新的数数据类型型论论文文检索系系统论文标题题作者列表表(第一一作者,第二作作者,找找出某人人参与撰撰写的所所有论文文)检索关键键字发表日期期(年月月日分开开)传统关系系数据库库的数据据类型复杂属性性只能拆拆分成并并列的单单一属性性姓名,地地址(省省、市、区、街街道、门门牌号)本来是一一个结合合紧密的的整体,在关系系数据库库中却只只能拆成成单一属属性,与与其他属属性并列列(如姓姓名、年年龄等),没有有反映出出它们的的紧密关关系。无法表示示变长的的属性家庭记录录有几个个孩子长字段设几个

4、字字段(不不好估计计)家庭编号号户主子女1子女2子女3传统关系系数据库库的数据据类型无法直接接表示嵌嵌套表例:一张张发货单单,发三三种货物物:放3条记记录,但但公共信信息存3遍(查查询方便便)拆成两张张表(发发货单,发送货货物),需要连连接,费费时,且且要清楚楚表与表表的关系系货单号发货人货物日期发往地货物名称称价格数量关系数据据库的数数据模型型数据模型型是模型型化数据据和信息息的工具具。现实世界界认识抽象信息世界界概念念数据模模型机器世界界DBMS支持的数数据模型关系模型型转换数据模型型演变文件系统统(OS)层次模型型网网状模型型关关系模型型(DB)特点:面向记录录,信息息由定长长记录组组成

5、。记录简单单(短小小)。原子字段段,字段段不再含含有结构构。关系模型型的特点点强调数据据的独立立性(以以数据为为中心),数据据与程序序分离。采用关系系模型、概念单单一,实实体和联联系都是是用关系系来表示示。关系必须须是规范范化的关关系,要要求每一一分量不不可再分分。支持关系系语言,具有高高度非过过程化,支持集集合运算算通过外来来码实现现表的连连接(多多表查询询)Oracle8扩扩充的类类型系统统是对关系系数据模模型进行行的扩充充。提供更为为丰富的的面向对对象的类类型系统统。扩充的类类型系统统允许元元组的属属性值为为复杂类类型,在在关系查查询语言言中增加加处理新新数据类类型的成成分。既保留关关系

6、模型型基础又提高建建模能力力对象关系系模型为为希望使使用面向向对象特特征的关关系数据据库用户户提供可可能。面向对象象的基本本概念面向对象象方法是是以要解解决的问问题中所所涉及到到的各种种对象为为主要考考虑因素素。对象是一一种看问问题的观观点,是是对现实实世界各各种元素素的一种种抽象。对象既既含数据据又含功功能,因因此具有有自身处处理数据据的能力力。对象象被认为为是迄今今为止最最接近真真实事物物的数据据抽象。现实世界界中对象象有两个个共同的的特点:一方面,它们都都有自己己的状态态。如一一台电视视机有自自己的摆摆放位置置,有关关机和开开机状态态,此刻刻正在播播放某一一频道的的电视节节目等另一方面面

7、,它们们又都有有自己的的行为,如电视视机的开开机、关关机、调调台等。面向对象象的基本本概念内部实现现(封装)接口属性、方方法能动的主主体使电脑贴贴近人脑脑的思维维模式(减少人人认识问问题时的的认识空空间和计计算机处处理问题题时的方方法空间间的不一一致性)。实现软件件的复用用(软件件芯片)。对象的属属性与方方法面向对象象程序设设计中的的对象是是现实世世界对象象的模型型化,它它同样具具有状态态和行为为。对象的状状态用属属性来维维护,对象的行行为用方方法来实实现。因此可以以简单地地讲,对对象是面面向对象象的程序序设计模模式,它它由描述述对象状状态的属属性(变变量)和和用来实实现对象象行为的的方法(代

8、码)组成。对象与类类相关对象象的集合合称为类类(Class)类是对象象的抽象象及描述述,它是是具有统统一属性性和方法法的多个个对象的的统一描描述体,是用来来定义一一组对象象共有属属性和方方法的模模板。类是用来来创建对对象实例例的样板板,它包包含所创创建对象象的状态态描述和和方法的的定义。类是一一个型,而对象象则是这这个型的的一个实实例。类是静态态概念,而对象象则是一一个动态态概念,因为只只有在运运行时才才给对象象分配空空间,对对象才真真正存在在。面向对象象的数据据模型在一些应应用中,用户将将数据库库中的数数据看作作是一组组对象而而非一组组记录。面向对象象的数据据模型是是面向对对象程序序设计思思

9、想在数数据库系系统中的的应用。基本思想想将数数据和操操作这些些数据的的程序代代码封装装在一个个对象里里。将一个对对象存储储在数据据库中:对象的数数据部分分必须针针对各个个对象分分别存储储。而实现类类方法的的程序代代码应该该和类的的定义一一起作为为数据库库模式的的一部分分存储。面向对象象数据库库数据库中中不是只只存储单单纯的数数据,而而是存储储包含属属性和方方法的对对象。对于一个个数据库库对象,可定义义在其上上运行的的过程和和函数。使数据据库中的的数据和和访问该该数据的的方法联联系起来来,可标标准化数数据访问问的方法法并提高高对象的的可复用用性。应用逻辑辑从应用用程序中中移动到到数据库库中(对对

10、象方法法)创建通用用的数据据库对象象,并能能成为数数据库对对象的标标准,可可实现数数据库对对象的重重用。数据模型型现实世界界认识抽象信息世界界概念念数据模模型机器世界界DBMS支持的数数据模型对象模型型转换对象模型型与关系系模型对象模型型对象类型型的属性性描述对象类型型的方法法封装了了操作该该对象的的代码。提供了了处理数数据库中中数据的的界面。关系模型型二维表中中列的定定义没有方法法另编程可使用操操作某数数据库表表的存储储过程。面向对象象数据模模型中的的类概念念实体体集概念念。面向对象象数据模模型中的的对象概概念实实体概念念对象模型型与关系系模型关系模型型可用二二维表来来表示关关系表表:属性二

11、二维表的的列元组二二维表的的行对象模型型可用二二维表来来表示对对象表表:用一个类类(对对象类型型)定义义一个对对象表类的属性性 二二维表表的列对象(类类的实例例)二二维表表的行(行对象象)通过对象象调用对对象方法法。Oracle的的扩充类类型Oracle是一个开开放的类类型系统统,增加加了复杂杂的数据据类型以以及用户户自定义义类型用户定义义的数据据类型使使得可以以在数据据库中为为现实世世界的对对象建模模对象类型型(记录录类型)数组类型型嵌套表类类型创建对象象表,实实现面向向对象的的数据库库设计(而非关关系型数数据库设设计。应用逻辑辑从应用用程序中中移动到到数据库库中(对对象方法法)扩充类型型的

12、不同同应用对象类型型数数组类型型嵌嵌套表类类型关系表对对象表对象类型利用对象象类型定定义复复合数据据类型用户自定定义数据据类型使用对象象类型定定义一个个记录数数据类型型CREATETYPEname_typeASOBJECT(first_nameVARCHAR2(4),last_nameVARCHAR2(4);CREATETYPEaddress_typeASOBJECT(cityVARCHAR2(10),streetVARCHAR2(10),zipNUMBER(6);CREATETABLEworker(widNUMBER(5)PRIMARYKEY,wnamename_type ,addressa

13、ddress_type);对象类型型数据的的操作使用对象类型型声明了关系表中的列,DML语句必须须用一些些特殊的的语法插入新记记录时,对于对对象类型型的列,要使用用构造函函数构造造出对应应类型的的数据。构造函数数是对象象类型的的特殊方方法,利利用此方方法为该该类型创创建对象象。构造造方法的的名称与与对象类类型(类类)同名名。对记录型型数据的的分量进进行操作作时,要要使用“别名”对象类型型数据的的操作插入语句句例:insertintoworkervalues(1,name_type(王,至远),address_type(北京,白颐颐路5号号,100084);insertintoworkerval

14、ues(2,name_type(张,大年),address_type(天津,康宁宁里20号,300072);insertintoworkervalues(3,name_type(赵,力平),address_type(上海,南京京路23号,200092);对象类型型数据的的查询查询语句句1select*from worker;WIDNAME(FIRST_NAME, LAST_NAME)ADDRESS(CITY,STREET,ZIP)-1NAME_TYPE(王,至远远)ADDRESS_TYPE(北京, 白白颐路5号, 100084)2NAME_TYPE(张,大年年)ADDRESS_TYPE(天津,

15、 康康宁里20号,300072)3NAME_TYPE(赵,力平平)ADDRESS_TYPE(上海, 南南京路23号,200092)查询语句句2selectwid,wname fromworker;WIDNAME(FIRST_NAME,LAST_NAME)-1NAME_TYPE(王,至远远)2NAME_TYPE(张,大年年)3NAME_TYPE(赵,力平平)对象类型型数据的的查询查询语句句3(用别别名)selectwid顾客编号号,w.address.city城市,w.address.street街道,w.address.zip邮编from workerw;顾客编号号城城市市街街道道邮邮编编-1

16、北北京白白颐路5号1000842天天津康康宁里20号3000723上上海南南京路23号200092查询语句句4(别名名的使用用)select*from workerworder byw.address.zip对象类型型数据的的操作修改updateworkerwsetw.address.zip=100083wherewid=1;删除deletefromworkerwherewid=1;.first_name=王;修改表结结构altertablecustadd(address1 address_type);不能对表表修改自定义的的数据类类型格

17、式式用户自定定义数据据类型对象类型型更加贴贴近现实实世界的的数据特特征。使用对象象类型可可以更加加统一、自然地地声明和和操作表表中的数数据(在整个数数据库中中地址一一致性)创建可为为大家引引用的新新数据类类型:创建一个个模式(如pub)建立公共共对象类类型(新新数据类类型)设置必要要的权限限使用CREATEPROCEDURE new_worker(widNUMBER,_type,addresspub.address_type)自定义数数据类型型上的索索引createindexaaa on worker(wname);ORA-02327:无法在具具有数据据类型ADT的列上

18、创创建索引引。(即使在在name_type类中定义义了排序序方法也也不可以以)如经常进进行如下下查询:selectwid顾客编号号,w.address.city城市,w.address.street街道,w.address.zip邮编from workerwwherew.address.zip=100084;可建索引引如下:createindexI_ziponworker(address.zip);使用对象象表面向对对象数据据库设计计建立对象象表的类类建类型(对象类类型声明明)createtype类型名asobject(属性名1类类型说明明,属性名2类类型说明明,.memberfunction

19、函数名(参数数说明)return返回类型型,memberprocedure过程名(参数说说明),) ;方法说明明属性说明明对象属性性类型对象类型型必须包包含一个个或多个个属性,属性的的类型可可以是:Oracle的原始数数据类型型、LOB对象对象的引引用(REF)收集(COLLECTION)等对象方法法方法是一一个过程程或函数数,是是对象类类型定义义的一部部分,是是程序员员编写的的用于操操纵对象象属性的的子程序序,被封封装在对对象类型型中。方法的种种类:成员方法法 (member)构造方法法 (constructor)MAP或ORDER方法(排排序方法法)一个类可可以有多多个方法法(也可可以不定

20、定义方法法)对象类型型不存储储数据;必须创创建相应应的表来来存储数数据编写方法法代码建类型体体(实现现类成员员方法)createtypebody类型名ASmemberfunction函数方法法名(参数说说明)return返回类型型is 说明部分分begin执行部分分end;memberprocedure过程方法法名(参参数说明明)is说明部分分begin执行部分分end;END;方法实现现方法实现现建立对象象表建对象表表Createtable表名of对象类型型();例:CREATETYPEemployee_typeASOBJECT(.);CREATETABLEemployeesOFemploy

21、ee_type(empnoconstrainte1primarykey );CREATETYPEBODYemployee_type();表定义的的其他说说明,如如完整性性约束等等,表的的列不能能再定义义建立对象象类型例例CREATETYPEemployee_typeASOBJECT(empnoNUMBER(3),enameVARCHAR2(10),salNUMBER(6.2),hiredateDATE ,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER);/创建对象

22、象表CREATETABLEemployees OF employee_type(PRIMARY KEY(empno),UNIQUE(ename),CHECK(sal300);建立对象象类型体体CREATEOR REPLACETYPEBODY employee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+

23、increment_salWHEREempno= SELF.empno;END;END;对方法的的限制编译软件件包中的的函数或或过程时时,可可以使用用PRAGMA编译指令令通知PL/SQL编译器禁禁止某方方法对数数据库表表和包中中的变量量读写, 当方方法体中中出现违违反情况况时,编编译出出错。格式:PRAGMARESTRICT_REFERENCES(function_name,WNDS , WNPS , RNDS , RNPS );WNDS不允许写写数据库库RNDS不允许读读数据库库WNPS不允许改改程序包包变量RNPS不允许引引用程序序包变量量对方法的的限制CREATEOR REPLACET

24、YPEemployee_typeASOBJECT(empnoNUMBER,enameVARCHAR2(10),salNUMBER,hiredateDATE ,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER) ,PRAGMARESTRICT_REFERENCES(days_at_company,WNDS ,WNPS);对方法的的限制CREATEOR REPLACETYPEBODY employee_typeASMEMBERFUNCTIONdays_at_compan

25、yRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);UPDATEemployees SEThiredate=hiredate+30;-END;.END;- -0/0PL/SQL:Compilationunit analysis terminated2/10PLS-00452:子程序DAYS_AT_COMPANY违反了它它的相关关编译指指令对象类型型-构构造子方方法Oracle自动地为为每个对对象类型型创建一一个构造造方法。构造子方方法的名名称采用用对象类类型名。构造子方方法的参参数即对对象类型型的所有有属性。构造子方方法初始始化一个个对象类类型的

26、实实例,并并将它它的属性性赋值。例:insertintoemployeesvalues(employee_type(1 ,Jone ,500 ,5-10月-1989);对象表操操作建表createtableemployees of employee_type;插入数据据insertintoemployeesvalues(employee_type(1,Jone,500,5-10月-1989);insertintoemployees-省略略构造方方法values(1,Jone,1500, 5-10月-1989);insertintoemployeesvalues(2,smith,700,10-5

27、月-1997);insertintoemployeesvalues(3,king,900,25-12月-2000);获取行对对象value函数数value(对象表别别名)返返回一个个行对象象(对象象类型)value用于从对对象表中中取得对对象实例例。不使用value, SELECT只能返回回一个对对象的各各个列值值。select*from employees;EMPNOENAMESALHIREDATE-1Jone150005-10月-892smith70010-5月-973king90025-12月 -00selectvalue(e)fromemployeese;VALUE(E)(EMPNO,

28、ENAME, HIREDATE)-EMPLOYEE_TYPE(1, Jone,1500,05-10月-89)EMPLOYEE_TYPE(2, smith, 700,10-5月-97)EMPLOYEE_TYPE(3, king,900,25-12月 -00)对象表方方法调用用selectename,hiredatefrom employeeswhereempno=1;EMPNAMEHIREDATE-Jone05-10月-89selectename,e.days_at_company() daysfrom employeesewhereempno=3;EMPNAMEDAYS-king45使用别名名

29、在PL/SQL程序中,取得的的对象实实例必须须被相同同类型的的对象变变量接收收。例:declareempemployee_type;beginselectvalue(e)intoempfrom employeesewhereempno=1;emp.raise_salary(500);end;/PL/SQL中对象方法法的调用用PL/SQL中对象方法法的调用用DECLAREemp_variableemployee_type;days_employednumber;BEGINSELECTVALUE( e)INTO emp_variableFROM employeeseWHEREe.empno =3;

30、days_employed := emp_variable.days_at_company();dbms_output.put_line(Daysemployed:|to_char(days_employed);END;/附:PL/SQL输出与环环境设置置执行结果果:Days employed:26PL/SQL输出(利利用包过过程)dbms_output.put_line() ;环境设置置exec dbms_output.enablesetserveroutput on对象方法法小结对象类型型总是有有1到多多个方法法(构造造方法是是隐含方方法,成成员方法法为0n个。成员方法法可以带带输入输输出

31、参数数。每个成员员方法含含有名为为SELF的隐隐含第一一参数,它具有有与对象象类型自自身相同同的类型型。定义函数数方法,如没参参数不用用写括号号,但调调用时要要写括号号。定义义方法形形参时,类型不不用写长长度,如如varchar2对象表的的特性对象表是是只用对对象类型型定义的的数据库库表,不不含关系系型列。对象表的的列对应应(用来来创建表表的)对对象类型型的属性性。对象表的的行是表表类型的的对象(实例),每一一行都有有一个系系统分配配的唯一一的对象象标识符符(OID)对象ID(OID)是每一个个行对象象的唯一一描述符符,是全全局唯一一的,并并且可以以引用OID不用于定定位数据据,ROWID仍用

32、于定定位数据据oracle通过对象象引用实实现数据据库中不不同对象象之间的的联系(与关系系表完全全不同)获取对象象引用ref 函数数具有OID的对象实实例可以以被引用用(REF)ref(对象表的的别名)返回对象象表实例例指针,即行对对象的引用。例:selectref(e)fromemployeese ;REF(e)-000028020965D.0BEFE0340800209ADC5901403BE50000000028020965D.0BEFE0340800209ADC5901403BE50001000028020965D.0BEFE0340800209ADC5901403BE50002对象引

33、用用例建立对象象表custCreatetypecust_typeasobject(custidnumber(5),namename_type,addressaddress_type); createtablecustofcust_type(custid primarykey );对象引用用例向cust表中插入入数据insertintocustvalues(1,name_type(王,至远),address_type(北京,白颐颐路5号号,100084) );insertintocustvalues(2,name_type(张,大年),address_type(天津,康宁宁里20号,300072

34、);insertintocustvalues(3,name_type(赵,力平),address_type(上海,南京京路23号,200092);对象引用用例查询cust表select*from custwherecustid=1;selectc.address.city,c.address.zipfrom .first_name=王;修改cust表结构?altertablecustadd(address1address_type);不允许!对象引用用例建立goods_typeCREATETYPEgoods_type AS OBJECT(gnoNUMBER(3)

35、,gnamevarchar2(20),pricenumber(6,2);/CREATETABLEgoodsOFgoods_type( constraintp1primarykey(gno);INSERTINTOgoodsVALUES(101,电视机,2900);INSERTINTOgoodsVALUES(102,洗衣机,1500);对象引用用例CREATETYPEorder_type AS OBJECT(orderidNUMBER(3),customerREFcust_type,orderdateDATE,qtyNUMBER(5),gnoNUMBER(3);/CREATETABLEorders

36、 OF order_type( FOREIGNKEY (gno) REFERENCESgoods(gno) ;对象引用用例-customer-gnonumberorders-2张张大年-custgno-goodsOID=对象表对象引引用REF是指向行行对象的的指针,易于实实现表和和表之间间的联系系,对象象之间连连接不再再需要关关系表的的连接(JOIN)操作。将对象表表的表别别名作为为REF的参数,可以取取得对应应OID的引用值值。引用只能能用于具具有OID的对象。customerREFcust_typeSCOPEISCUSTSCOPE子句用于于限定一一个引用用在一个个指定表表中,这这样可以以提

37、高查查询性能能,并减减少存储储指针的的空间。INSERTINTOordersSELECT1, ref(c),7-1月-2000,165,101FROM custcWHEREcustid=1;UPDATEordersSETcustomer=( SELECTREF(c )FROMcust cWHEREcustid=2 )WHEREorderid =1;引用类型型数据的的操作引用类型型数据的的操作SELECTcustomerFROM ordersWHEREorderid =1;22020865F009D0AC26242A35E0340800SELECTo.customer.custid顾客号,o.c

38、.last_name名,orderdate日期FROM ordersoWHEREorderid =1顾客号名名日日期-2大年07-1月-00对象引用用简化化了代码码数据库管管理对象象间的连连系,用用户只需需通过属属性进行行对象的的引用。在关系设设计中, 开发发人员必必须使用用联接(JOIN)SELECTname,address,.FROM orderso,cust cWHEREo.custid= c.custid andorderid=1;deref函数数deref(ref指针)返返回指针针指向的的对象本本身例:selectderef(customer)from ord

39、erswhere orderid=1;DEREF(CUSTOMER)(CUSTID,NAME(FIRST_NAME, LAST_NAME),ADDRESS(CITY, STREET,ZIP)-CUST_TYPE(2,NAME_TYPE(张张,大年年), ADDRESS_TYPE(天津,康宁里里20号号,300072)试比较:selectderef(ref(c)from custcwherecustid=2;和selectvalue(c)fromcust cwherecustid=2;SQL语语句中的的排序和和比较传统的数数据类型型主要为为标量数数据类型型:number, char,date标量

40、数据据类型可可以排序序(如orderby)排序在SQL语句的使使用:关系运算算(标标量类类型方法返回回一个传传统数据据类型用用于排序序。没有输入入参数(只有一一个隐含含参数SELF)。方法被隐隐含调用用。在类型定定义中说说明MAP方法:CREATETYPEname_typeASOBJECT (first_namevarchar2(4),last_namevarchar2(4),MAPMEMBERFUNCTIONname_mapRETURNvarchar2);在类型体体中实现现MAP方法:CREATETYPEBODY name_typeASMAPMEMBER FUNCTION name_mapR

41、ETURN varchar2 ISBEGINRETURNfirst_name|last_name;END;END;排序:SELECTcustid ,c.address.cityFROM custcORDERBYname desc;任何基于于name_type类型的的排序按按名称的的拼接串串作为大大小比较较的依据据。MAP方方法例例MAP方方法隐含含调用ORDER方法决定类型型实例的的序列关关系。有一个参参数(外外加一个个隐含的的参数SELF)函数方法法返回一一个整数数如果对象象自身比比参数对对象小, 返回回 -1如果对象象自身与与参数对对象相等等,返返回0如果对象象自身比比参数对对象大, 返回

42、回 1ORDER方法例1在类型定定义中声声明order方法:CREATEor replaceTYPEaddress_typeASOBJECT( cityVARCHAR2(10),streetVARCHAR2(10),zipNUMBER(6),ORDERMEMBERFUNCTIONaddress_order(other_addressaddress_type)RETURNINTEGER);在类型体体中实现现方法:CREATEORREPLACETYPE BODYaddress_typeASORDERMEMBERFUNCTIONaddress_order(other_addressaddress_t

43、ype)RETURNINTEGERISBEGINIFself.zip other_address.zip THENRETURN-1;ELSE RETURN0;ENDIF;END;END;ORDER方法例1邮编数小小的地址址大ORDER方法例1排序:.first_name姓,.last_name名,c.address.city城市,c.address.zip邮编from custcorderbyc.address desc;排序结果果:姓名名城城市邮邮编-王至至远远北北京100084赵力力平平上上海200092张大大民民天天津300072ORDER方法例2CR

44、EATEORREPLACETYPEemployee_typeASOBJECT(empnoNUMBER(3),enameVARCHAR2(10),salNUMBER(6.2),hiredateDATE ,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER) ,PRAGMARESTRICT_REFERENCES(days_at_company,WNDS ,WNPS) ,ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)

45、RETURNINTEGER);ORDER方法例2CREATEOR REPLACETYPEBODY employee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+ increment_salWHEREempno= SELF.empno;END;ORDER方法例2ORDERMEMBERFUNCTIONemp_

46、order(other_empemployee_type)RETURNINTEGERISBEGINRETURNFLOOR(-(SELF.hiredate- other_emp.hiredate) );END;END;/ORDER方法例2select*from employeeseorderbyvalue(e);-按对象大大小排序序EMPNOENAMESALHIREDATE-3king90025-12月-002smith70010-5月-971Jone150005-10月-89对象类型型维护ALTERTYPEemployee_typeREPLACEASOBJECT(empnoNUMBER,ena

47、meVARCHAR2(10),salNUMBER,hiredateDATE,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER),PRAGMARESTRICT_REFERENCES(days_at_company,wnds,wnps), 对象类型型维护ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)RETURNINTEGER,MEMBERFUNCTIONmonth_at_company-新方法RETURNNUMB

48、ER,PRAGMARESTRICT_REFERENCES(month_at_company,wnds) );/对象类型型维护CREATEOR REPLACETYPEBODY employee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate- hiredate);END;MEMBERPROCEDURE raise_salary(increment_sal NUMBER)ISBEGINUPDATEemployeesSETsal= sal+ increment_salWHEREempno= SELF.

49、empno;END;对象类型型维护ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)RETURNINTEGERISBEGINRETURNFLOOR(-(SELF.hiredateother_emp.hiredate) );END;MEMBERFUNCTIONmonth_at_companyRETURNNUMBERISBEGINRETURNmonths_between(sysdate,hiredate);END;END;/对象类型型信息与类型有有关的数数据字典典视图user_typestype_nameattributesmethodsuse

50、r_type_attrstype_nameattr_namelengthattr_type_nameuser_type_methodstype_namemethod_name对象类型型信息查看对象象类型selecttype_name,attributes,methodsfrom user_types;TYPE_NAMEATTRIBUTESMETHODS-ADDRESS_TYPE31EMPLOYEE_TYPE31NAME_TYPE20columntype_name formata20wrapcolumnattributesformat999 wrapcolumnmethodsformat999

51、wrap对象类型型信息查看类属属性定义义selectattr_name,length,attr_type_namefrom user_type_attrswheretype_name=ADDRESS_TYPE;ATTR_NAMELENGTHATTR_TYPE_NAME-CITY20VARCHAR2STREET30VARCHAR2ZIPNUMBER对象类型型信息查看类方方法定义义selecttype_name ,method_namefrom user_type_methods;TYPE_NAMEMETHOD_NAME-ADDRESS_TYPEADDRESS_ORDEREMPLOYEE_TYPE

52、DAYS_AT_COMPANYEMPLOYEE_TYPEMONTH_AT_COMPANYEMPLOYEE_TYPEEMP_ORDERNAME_TYPENAME_MAP对象类型型相关性性在对象和和对象类类型之间间存在相相关树。必须保保证树的的完整。不允许许破坏被被引用的的类型。例如:drop typename_type;当类型已被被引用时时不让删删drop typename_type force ;强行删除除,再查查使用该该类型定定义的表表时出错错。name_typeaddress_type对象类型型相关性性workercust_typeCustemployee_typeemployeesord

53、ersgoodsgoods_typeorder_type查看对象象相关性性例:selectname,type,referenced_nameRname,referenced_typeRtypefrom user_dependencieswherename=ORDERS ;NAMETYPERNAMERTYPE-ORDERSTABLESTANDARDPACKAGEORDERSTABLECUST_TYPETYPEORDERSTABLEORDER_TYPETYPE查看对象象相关性性例:=CUSTnametypeRnameRtype-CUSTTABLESTANDARDPACKAGE

54、CUSTTABLENAME_TYPETYPECUSTTABLEADDRESS_TYPETYPECUSTTABLECUST_TYPETYPE例:selectreferenced_name=cust_type;查看哪些些对象使使用了cust_type类型。查看对象象相关性性例:=CUST_TYPE;nametypeRnameRtype-CUST_TYPETYPESTANDARDPACKAGECUST_TYPETYPENAME_TYPETYPECUST_TYPETYPEADDRESS_TYPETYPE列出依赖赖树:执行oracle根目录/rdbms/admin/utldtree

55、.sql生成两个个视图deptree和ideptree程序视图图显示依依赖树。小结对对象属性性和方法法当使用表表的当前前行对象象时,对对象属性性和方法法的引用用必须使使用表的的别名,而不能能是实际际的表名名selectc.address.city,c.address.zipfrom .first_name=王;selecte.days_at_company()from employeesewheree.empno=3;小结列列对象与与行对象象列对象:嵌入型型对象,作为表表中的列列来处理理的对象象,要通通过主表表才能访访问。自定义复复合数据据类型可变数组组嵌套表行

56、对象:不是嵌嵌入型对对象,而而是引用用型对象象,可以以通过其其他对象象的引用用(ref)来访问。列对象没没有OID,而且不能能被引用用。列对象是是基于对对数据库库已有功功能的扩扩充(自自定义类类型)。收集类型型Oracle的数据类类型扩展展收集类型型实现一对对多关系系的模型型化。在关系设设计中,只能通通过联接接(JOIN)实现表的的关联, 将导导致复杂杂的运算算。在对象设设计中,可以通通过收集集实现对对象类型型的关联联收集类型型记录数组表收集类型型-可可变数组组支持有序序的一对对多的关关系。可以在一一行中存存储某个个记录的的重复属属性。可变,但但要指定定数组最最大容量量。数组元素素具有相相同类

57、型型,可以以是基基本类型型、REF或对象类类型。但但不能是是嵌套表表或可变变数组类类型。不能是VARRAYOFLOB类型book数据结构构分析化学学 相关图Book_list_type(varray(5)ofvarchar2(10)borrower_type (sno,sname,class,books)borrower使用数组组类型定义数组组类型CREATETYPEbook_list_typeASVARRAY(5)OFVARCHAR2(10);建借阅者者表的类类型CREATETYPEborrower_type AS OBJECT(snoNUMBER(6),snameVARCHAR2(10),

58、classVARCHAR2(10),booksbook_list_type,MEMBERFUNCTIONadd_book(bookVARCHAR2)RETURNbook_list_type,PRAGMArestrict_references(add_book, WNDS);在方法中中处理数数组类型型数据实现类方方法CREATETYPEBODY borrower_typeASMEMBERFUNCTIONadd_book(bookvarchar2)RETURNbook_list_typeIStemp_arraybook_list_type;counterINTEGER;BEGINtemp_arra

59、y := SELF.books;counter := temp_array.COUNT+1;temp_array.EXTEND;temp_array(counter) := book;RETURNtemp_array;END;END;建含有数数组的对对象表CREATETABLEborrowerOFborrower_type;收集类型型-收收集的方方法收集(collection)的方法: 内置置的函数数和过程程函数方法法:EXISTS(n)当收集类类型中指指定元素素存在为为“真”COUNT返回当前前收集类类型中的的元素个个数。LIMIT返回可变变数组元元素个数数的上限限值FIRSTandLAST

60、返回收集集中第一一个和最最后一个个元素的的下标。 (对对于可变变数组,总是返返回1和和count)PRIOR(n)andNEXT(n)返回指定定元素的的前一个个和后一一个元素素的下标标。收集类型型-收收集的方方法过程方法法:EXTEND扩充收集集的大小小extend扩充一个个空元素素extend(n)扩充n个空元素素extend(n,I)将收集中中第I个元素拷拷贝n份,追加加到收集集中。TRIM从收集尾尾部删除除元素trim删除收集集中最后后一个元元素trim(n)删除收集集中最后后n个元素DELETE删除元素素delete删除收集集中所有有元素delete(n)删除收集集中第n个元素dele

温馨提示

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

评论

0/150

提交评论