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

下载本文档

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

文档简介

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

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

3、,应用需要新的数据类型, 论文检索系统 论文标题 作者列表(第一作者,第二作者,找出某人参与撰写的所有论文) 检索关键字 发表日期(年月日分开),传统关系数据库的数据类型,复杂属性只能拆分成并列的单一属性 姓名,地址(省、市、区、街道、门牌号) 本来是一个结合紧密的整体,在关系数据库中却只能拆成单一属性,与其他属性并列(如姓名、年龄等),没有反映出它们的紧密关系。 无法表示变长的属性 家庭记录有几个孩子 长字段 设几个字段(不好估计),家庭编号,户主,子女1,子女2,子女3,传统关系数据库的数据类型,无法直接表示嵌套表 例:一张发货单,发三种货物: 放3条记录,但公共信息存3遍(查询方便) 拆

4、成两张表(发货单,发送货物),需要连接,费时,且要清楚表与表的关系,货单号,发货人,货物,日期,发往地,货物名称,价格,数量,关系数据库的数据模型,数据模型是模型化数据和信息的工具。,现实世界,认识 抽象,信息世界概念数据模型,机器世界 DBMS支持的数据模型 关系模型,转换,数据模型演变,文件系统(OS) 层次模型网状模型关系模型(DB) 特点: 面向记录,信息由定长记录组成。 记录简单(短小)。 原子字段,字段不再含有结构。,关系模型的特点,强调数据的独立性(以数据为中心),数据与程序分离。 采用关系模型、概念单一,实体和联系都是用关系来表示。 关系必须是规范化的关系,要求每一分量不可再分

5、。 支持关系语言,具有高度非过程化,支持集合运算 通过外来码实现表的连接(多表查询),Oracle8 扩充的类型系统,是对关系数据模型进行的扩充。 提供更为丰富的面向对象的类型系统。 扩充的类型系统允许元组的属性值为复杂类型,在关系查询语言中增加处理新数据类型的成分。 既保留关系模型基础 又提高建模能力 对象关系模型为希望使用面向对象特征的关系数据库用户提供可能。,面向对象的基本概念,面向对象方法是以要解决的问题中所涉及到的各种对象为主要考虑因素。 对象是一种看问题的观点,是对现实世界各种元素的一种抽象。对象既含数据又含功能,因此具有自身处理数据的能力。对象被认为是迄今为止最接近真实事物的数据

6、抽象。 现实世界中对象有两个共同的特点: 一方面,它们都有自己的状态。如一台电视机有自己的摆放位置,有关机和开机状态,此刻正在播放某一频道的电视节目等 另一方面,它们又都有自己的行为,如电视机的开机、关机、调台等。,面向对象的基本概念,内部实现 (封装),接口 属性、方法,能动的主体,使电脑贴近人脑的思维模式(减少人认识问题时的认识空间和计算机处理问题时的方法空间的不一致性)。 实现软件的复用(软件芯片)。,对象的属性与方法,面向对象程序设计中的对象是现实世界对象的模型化,它同样具有状态和行为。 对象的状态用属性来维护, 对象的行为用方法来实现。 因此可以简单地讲,对象是面向对象的程序设计模式

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

8、些数据的程序代码封装在一个对象里。 将一个对象存储在数据库中: 对象的数据部分必须针对各个对象分别存储。 而实现类方法的程序代码应该和类的定义一起作为数据库模式的一部分存储。,面向对象数据库,数据库中不是只存储单纯的数据,而是存储包含属性和方法的对象。 对于一个数据库对象,可定义在其上运行的过程和函数。使数据库中的数据和访问该数据的方法联系起来,可标准化数据访问的方法并提高对象的可复用性。 应用逻辑从应用程序中移动到数据库中(对象方法) 创建通用的数据库对象,并能成为数据库对象的标准,可实现数据库对象的重用。,数据模型,现实世界,认识 抽象,信息世界概念数据模型,机器世界 DBMS支持的数据模

9、型 对象模型,转换,对象模型与关系模型,对象模型 对象类型的属性描述 对象类型的方法封装了操作该对象的代码。提供了处理数据库中数据的界面。,关系模型 二维表中列的定义 没有方法 另编程 可使用操作某数据库表的存储过程。,面向对象数据模型中的类概念实体集概念。 面向对象数据模型中的对象概念实体概念,对象模型与关系模型,关系模型可用二维表来表示 关系表: 属性 二维表的列 元组 二维表的行 对象模型可用二维表来表示 对象表: 用一个 类(对象类型)定义一个对象表 类的属性 二维表的列 对象(类的实例) 二维表的行(行对象) 通过对象调用对象方法。,Oracle的扩充类型,Oracle是一个开放的类

10、型系统,增加了复杂的数据类型以及用户自定义类型 用户定义的数据类型使得可以在数据库中为现实世界的对象建模 对象类型(记录类型) 数组类型 嵌套表类型 创建对象表,实现面向对象的数据库设计(而非关系型数据库设计。 应用逻辑从应用程序中移动到数据库中(对象方法),扩充类型的不同应用,对象类型 数组类型 嵌套表类型,关系表 对象表,对 象 类 型,利用对象类型定义复合数据类型,用户自定义数据类型,使用对象类型定义一个记录数据类型 CREATE TYPE name_type AS OBJECT ( first_nameVARCHAR2(4), last_nameVARCHAR2(4) ) ; CREA

11、TE TYPE address_type AS OBJECT ( city VARCHAR2(10), street VARCHAR2(10), zip NUMBER(6) ) ; CREATE TABLE worker ( wid NUMBER(5) PRIMARY KEY, wname name_type , address address_type ) ;,对象类型数据的操作,使用对象类型声明了关系表中的列,DML语句必须用一些特殊的语法 插入新记录时,对于对象类型的列,要使用构造函数构造出对应类型的数据。 构造函数是对象类型的特殊方法,利用此方法为该类型创建对象。构造方法的名称与对象类

12、型(类)同名。 对记录型数据的分量进行操作时,要使用“别名”,对象类型数据的操作,插入语句例: insert into worker values(1,name_type(王,至远), address_type(北京,白颐路5号,100084); insert into worker values(2,name_type(张,大年), address_type(天津,康宁里20号,300072); insert into worker values(3,name_type(赵,力平), address_type(上海,南京路23号,200092);,对象类型数据的查询,查询语句1 select

13、 * from worker ; WID NAME(FIRST_NAME, LAST_NAME) ADDRESS(CITY, STREET, ZIP) - - - 1 NAME_TYPE(王, 至远) ADDRESS_TYPE(北京, 白颐路5号, 100084) 2 NAME_TYPE(张, 大年) ADDRESS_TYPE(天津, 康宁里20号, 300072) 3 NAME_TYPE(赵, 力平) ADDRESS_TYPE(上海, 南京路23号, 200092) 查询语句2 select wid,wname from worker; WID NAME(FIRST_NAME, LAST_N

14、AME) - - 1 NAME_TYPE(王, 至远) 2 NAME_TYPE(张, 大年) 3 NAME_TYPE(赵, 力平),对象类型数据的查询,查询语句3 (用别名 ) select wid 顾客编号,w.address.city 城市, w.address.street 街道,w.address.zip 邮编 from worker w ; 顾客编号 城市 街道 邮编 - - - - 1 北京 白颐路5号 100084 2 天津 康宁里20号 300072 3 上海 南京路23号 200092 查询语句4(别名的使用) select * from worker w order by

15、w.address.zip,对象类型数据的操作,修改 update worker w set w.address.zip=100083 where wid=1 ; 删除 delete from worker where wid=1; delete from worker w where .first_name=王 ; 修改表结构 alter table cust add(address1 address_type); 不能对表修改自定义的数据类型格式,用户自定义数据类型,对象类型更加贴近现实世界的数据特征。 使用对象类型可以更加统一、自然地声明和操作表中的数据 (在整个数据库中地址

16、一致性) 创建可为大家引用的新数据类型: 创建一个模式(如 pub) 建立公共对象类型(新数据类型) 设置必要的权限 使用 CREATE PROCEDURE new_worker( wid NUMBER , name _type , address pub.address_type ),自定义数据类型上的索引,create index aaa on worker(wname); ORA-02327: 无法在具有数据类型 ADT 的列上创建索引。 (即使在name_type类中定义了排序方法也不可以) 如经常进行如下查询: select wid 顾客编号,w.address.ci

17、ty 城市, w.address.street 街道,w.address.zip 邮编 from worker w where w.address.zip=100084 ; 可建索引如下: create index I_zip on worker(address.zip);,使用对象表 面向对象数据库设计,建立对象表的类,建类型(对象类型声明) create type 类型名 as object( 属性名1 类型说明, 属性名2 类型说明, . member function 函数名 (参数说明) return 返回类型, member procedure 过程名(参数说明), ) ;,方法说

18、明,属性说明,对象属性类型,对象类型必须包含一个或多个属性,属性的类型可以是: Oracle的原始数据类型、 LOB 对象 对象的引用(REF) 收集(COLLECTION)等,对象方法,方法是一个过程或函数, 是对象类型定义的一部分,是程序员编写的用于操纵对象属性的子程序,被封装在对象类型中。 方法的种类: 成员方法 (member) 构造方法 (constructor) MAP 或 ORDER 方法(排序方法) 一个类可以有多个方法(也可以不定义方法) 对象类型不存储数据;必须创建相应的表来存储数据,编写方法代码,建类型体(实现类成员方法) create type body 类型名 AS

19、member function 函数方法名 (参数说明) return 返回类型 is 说明部分 begin 执行部分 end ; member procedure 过程方法名(参数说明) is 说明部分 begin 执行部分 end ; END ;,方法实现,方法实现,建立对象表,建对象表 Create table 表名 of 对象类型( ) ; 例: CREATE TYPE employee_type AS OBJECT(.) ; CREATE TABLE employees OF employee_type (empno constraint e1 primary key ); CREA

20、TE TYPE BODY employee_type() ;,表定义的其他说明,如完整性约束等,表的列不能再定义,建立对象类型例,CREATE TYPE employee_type AS OBJECT ( empno NUMBER(3), ename VARCHAR2(10), sal NUMBER(6.2), hiredate DATE , MEMBER FUNCTION days_at_company RETURN NUMBER, MEMBER PROCEDURE raise_salary(increment_sal NUMBER) ); /,创建对象表,CREATE TABLE empl

21、oyees OF employee_type ( PRIMARY KEY(empno), UNIQUE(ename), CHECK(sal300) );,建立对象类型体,CREATE OR REPLACE TYPE BODY employee_type AS MEMBER FUNCTION days_at_company RETURN NUMBER IS BEGIN RETURN floor(sysdate - hiredate); END; MEMBER PROCEDURE raise_salary(increment_sal NUMBER) IS BEGIN UPDATE employee

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

23、TE OR REPLACE TYPE employee_type AS OBJECT ( empno NUMBER, ename VARCHAR2(10), sal NUMBER, hiredate DATE , MEMBER FUNCTION days_at_company RETURN NUMBER, MEMBER PROCEDURE raise_salary(increment_sal NUMBER) , PRAGMA RESTRICT_REFERENCES (days_at_company, WNDS , WNPS ) );,对方法的限制,CREATE OR REPLACE TYPE

24、BODY employee_type AS MEMBER FUNCTION days_at_company RETURN NUMBER IS BEGIN RETURN floor(sysdate - hiredate); UPDATE employees SET hiredate=hiredate+30; - END; . END; - - 0/0 PL/SQL: Compilation unit analysis terminated 2/10 PLS-00452: 子程序 DAYS_AT_COMPANY 违反了它的相关编译指令,对象类型-构造子方法,Oracle 自动地为每个对象类型创建一

25、个构造方法。 构造子方法的名称采用对象类型名。 构造子方法的参数即对象类型的所有属性。 构造子方法初始化一个对象类型的实例, 并将它的属性赋值。 例: insert into employees values(employee_type(1 , Jone , 500 , 5-10月-1989);,对象表操作,建表 create table employees of employee_type; 插入数据 insert into employees values(employee_type(1,Jone,500,5-10月-1989); insert into employees -省略构造方法

26、 values (1,Jone,1500, 5-10月-1989); insert into employees values (2,smith,700,10-5月-1997); insert into employees values (3,king,900,25-12月-2000);,获取行对象value函数,value(对象表别名)返回一个行对象(对象类型) value用于从对象表中取得对象实例。 不使用value, SELECT只能返回一个对象的各个列值。 select * from employees; EMPNO ENAME SAL HIREDATE - 1 Jone 1500 0

27、5-10月-89 2 smith 700 10-5月-97 3 king 900 25-12月 -00 select value(e) from employees e; VALUE(E) (EMPNO, 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),对象表方法调用,select ename ,hiredate from employees where empno=1 ;

28、EMPNAME HIREDATE - - Jone 05-10月-89 select ename , e.days_at_company() days from employees e where empno=3; EMPNAME DAYS - king 45,使用别名,在PL/SQL程序中,取得的对象实例必须被相同类型的对象变量接收。 例: declare emp employee_type; begin select value(e) into emp from employees e where empno=1; emp.raise_salary(500); end; /,PL/SQL中

29、对象方法的调用,PL/SQL中对象方法的调用,DECLARE emp_variableemployee_type; days_employednumber; BEGIN SELECT VALUE( e ) INTO emp_variable FROM employees e WHERE e.empno = 3 ; days_employed := emp_variable.days_at_company() ; dbms_output.put_line(Days employed: | to_char(days_employed) ; END; /,附:PL/SQL输出与环境设置,执行结果:

30、Days employed: 26 PL/SQL输出(利用包过程) dbms_output.put_line() ; 环境设置 exec dbms_output.enable set serveroutput on,对象方法小结,对象类型总是有1到多个方法(构造方法是隐含方法,成员方法为0n个。 成员方法可以带输入输出参数。 每个成员方法含有名为SELF的隐含第一参数,它具有与对象类型自身相同的类型。 定义函数方法,如没参数不用写括号,但调用时要写括号。定义方法形参时,类型不用写长度,如varchar2,对象表的特性,对象表是只用对象类型定义的数据库表,不含关系型列。 对象表的列对应(用来创建

31、表的)对象类型的属性。 对象表的行是表类型的对象(实例),每一行都有一个系统分配的唯一的对象标识符(OID) 对象ID(OID)是每一个行对象的唯一描述符,是全局唯一的,并且可以引用 OID不用于定位数据, ROWID仍用于定位数据 oracle 通过对象引用实现数据库中不同对象之间的联系(与关系表完全不同),获取对象引用ref 函数,具有OID的对象实例可以被引用(REF) ref(对象表的别名) 返回对象表实例指针,即行对象的引用。 例: select ref(e) from employees e ; REF(e) - 000028020965D.0BEFE0340800209ADC59

32、01403BE50000 000028020965D.0BEFE0340800209ADC5901403BE50001 000028020965D.0BEFE0340800209ADC5901403BE50002,对象引用例,建立对象表cust Create type cust_type as object ( custidnumber(5), namename_type, address address_type ); create table cust of cust_type (custid primary key );,对象引用例,向cust表中插入数据 insert into cus

33、t values(1,name_type(王,至远), address_type(北京,白颐路5号,100084) ); insert into cust values(2,name_type(张,大年), address_type(天津,康宁里20号,300072); insert into cust values(3,name_type(赵,力平), address_type(上海,南京路23号,200092);,对象引用例,查询cust表 select * from cust where custid=1; select c.address.city,c.address.zip from

34、 cust c where .first_name=王 ; 修改cust 表结构 ? alter table cust add(address1 address_type); 不允许!,对象引用例,建立goods_type CREATE TYPE goods_type AS OBJECT( gno NUMBER(3), gname varchar2(20), price number(6,2) ); / CREATE TABLE goods OF goods_type ( constraint p1 primary key(gno) ; INSERT INTO goods VALU

35、ES(101,电视机,2900); INSERT INTO goods VALUES(102,洗衣机,1500);,对象引用例,CREATE TYPE order_type AS OBJECT( orderid NUMBER(3), customerREF cust_type, orderdateDATE, qtyNUMBER(5), gnoNUMBER(3) ); /,CREATE TABLE orders OF order_type ( FOREIGN KEY (gno) REFERENCES goods(gno) ) ;,对象引用例,- customer - gno number,ord

36、ers,- 2 张大年 -,cust,gno -,goods,OID,=,对象表对象引用,REF是指向行对象的指针,易于实现表和表之间的联系,对象之间连接不再需要关系表的连接(JOIN)操作。 将对象表的表别名作为REF的参数,可以取得对应OID的引用值。 引用只能用于具有OID的对象。 customer REFcust_type SCOPE IS CUST SCOPE子句用于限定一个引用在一个指定表中,这样可以提高查询性能,并减少存储指针的空间。,INSERT INTO orders SELECT 1, ref(c), 7-1月-2000,165, 101 FROM cust c WHERE

37、 custid=1; UPDATE orders SET customer = ( SELECT REF( c ) FROM cust c WHERE custid = 2 ) WHERE orderid = 1 ;,引用类型数据的操作,引用类型数据的操作,SELECT customer FROM orders WHERE orderid = 1; 22020865F009D0AC26242A35E0340800 SELECT o.customer.custid 顾客号, .last_name 名,orderdate 日期 FROM orders o WHERE

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

39、ID, NAME(FIRST_NAME, LAST_NAME), ADDRESS(CITY, STREET, ZIP) - CUST_TYPE(2, NAME_TYPE(张, 大年), ADDRESS_TYPE(天津, 康宁里20号, 300072) 试比较: select deref(ref(c) from cust c where custid=2; 和 select value(c) from cust c where custid=2;,SQL语句中的排序和比较,传统的数据类型主要为标量数据类型: number, char,date 标量数据类型可以排序(如order by ) 排序在

40、SQL语句的使用: 关系运算( = ) between 及 in 的判断 order by group by distinct 子句 unique 和 primary key 约束 自定义数据类型如何排序 select wname, address from worker order by address ; 错误位于第2行: ORA-22950: 无法 ORDER 没有 MAP 或 ORDER 方法的对象,对象类型的排序方法,同类的排序对支持用户定义的对象类型很重要。 对象类型由于结构复杂, 必须借助方法实现排序和比较。 MAP方法将对象类型转换为传统数据类型。 ORDER方法提供排序规则。

41、比较本对象和另一对象实例, 并返回1, 0, -1 分别代表 大于、等于、小于。 一个对象类型只能有一个MAP方法或一个 ORDER方法: map member function order member function,MAP 方法例,对象类型- 标量类型 方法返回一个传统数据类型用于排序。 没有输入参数(只有一个隐含参数SELF)。 方法被隐含调用。 在类型定义中说明MAP方法: CREATE TYPE name_type AS OBJECT ( first_name varchar2(4), last_name varchar2(4), MAP MEMBER FUNCTION name

42、_map RETURN varchar2 );,在类型体中实现MAP方法: CREATE TYPE BODY name_type AS MAP MEMBER FUNCTION name_map RETURN varchar2 IS BEGIN RETURN first_name | last_name ; END; END; 排序: SELECT custid , c.address.city FROM cust c ORDER BY name desc ;,任何基于name_type类型的排序按名称的拼接串作为大小比较的依据。,MAP 方法例,MAP方法隐含调用,ORDER 方法,决定类型实

43、例的序列关系。 有一个参数(外加一个隐含的参数SELF) 函数方法返回一个整数 如果对象自身比参数对象小, 返回 -1 如果对象自身与参数对象相等, 返回 0 如果对象自身比参数对象大, 返回 1,ORDER 方法例1,在类型定义中声明order方法: CREATE or replace TYPE address_type AS OBJECT ( city VARCHAR2(10), street VARCHAR2(10), zip NUMBER(6), ORDER MEMBER FUNCTION address_order(other_address address_type) RETURN

44、 INTEGER );,在类型体中实现方法: CREATE OR REPLACE TYPE BODY address_type AS ORDER MEMBER FUNCTION address_order(other_address address_type) RETURN INTEGER IS BEGIN IF self.zip other_address.zip THEN RETURN -1; ELSE RETURN 0; END IF; END; END ;,ORDER 方法例1,邮编数小的地址大,ORDER 方法例1,排序: select .first_name 姓, c.

45、name.last_name 名, c.address.city 城市,c.address.zip 邮编 from cust c order by c.address desc ; 排序结果: 姓 名 城市 邮编 - - - - 王 至远 北京 100084 赵 力平 上海 200092 张 大民 天津 300072,ORDER 方法例2,CREATE OR REPLACE TYPE employee_type AS OBJECT( empno NUMBER(3), ename VARCHAR2(10), sal NUMBER(6.2), hiredate DATE , MEMBER FUNC

46、TION days_at_company RETURN NUMBER, MEMBER PROCEDURE raise_salary(increment_sal NUMBER) , PRAGMA RESTRICT_REFERENCES (days_at_company, WNDS , WNPS ) , ORDER MEMBER FUNCTION emp_order( other_emp employee_type) RETURN INTEGER );,ORDER 方法例2,CREATE OR REPLACE TYPE BODY employee_type AS MEMBER FUNCTION d

47、ays_at_company RETURN NUMBER IS BEGIN RETURN floor(sysdate - hiredate); END; MEMBER PROCEDURE raise_salary(increment_sal NUMBER) IS BEGIN UPDATE employees SET sal = sal + increment_sal WHERE empno = SELF.empno; END;,ORDER 方法例2,ORDER MEMBER FUNCTION emp_order(other_emp employee_type) RETURN INTEGER I

48、S BEGIN RETURN FLOOR( -(SELF.hiredate - other_emp.hiredate) ); END; END; /,ORDER 方法例2,select * from employees e order by value(e); -按对象大小排序 EMPNO ENAME SAL HIREDATE - - - - 3 king 900 25-12月-00 2 smith 700 10-5月 -97 1 Jone 1500 05-10月-89,对象类型维护,ALTER TYPE employee_type REPLACE AS OBJECT ( empno NUMB

49、ER, ename VARCHAR2(10), sal NUMBER, hiredate DATE , MEMBER FUNCTION days_at_company RETURN NUMBER, MEMBER PROCEDURE raise_salary(increment_sal NUMBER), PRAGMA RESTRICT_REFERENCES(days_at_company,wnds,wnps),对象类型维护,ORDER MEMBER FUNCTION emp_order(other_emp employee_type) RETURN INTEGER, MEMBER FUNCTIO

50、N month_at_company -新方法 RETURN NUMBER, PRAGMA RESTRICT_REFERENCES( month_at_company,wnds) ); /,对象类型维护,CREATE OR REPLACE TYPE BODY employee_type AS MEMBER FUNCTION days_at_company RETURN NUMBER IS BEGIN RETURN floor(sysdate - hiredate); END; MEMBER PROCEDURE raise_salary(increment_sal NUMBER) IS BEGI

51、N UPDATE employees SET sal = sal + increment_sal WHERE empno = SELF.empno; END;,对象类型维护,ORDER MEMBER FUNCTION emp_order(other_emp employee_type) RETURN INTEGER IS BEGIN RETURN FLOOR( -(SELF.hiredate other_emp.hiredate) ); END; MEMBER FUNCTION month_at_company RETURN NUMBER IS BEGIN RETURN months_betw

52、een(sysdate,hiredate); END; END; /,对象类型信息,与类型有关的数据字典视图 user_types type_name attributes methods user_type_attrs type_name attr_name length attr_type_name user_type_methods type_name method_name ,对象类型信息,查看对象类型 select type_name,attributes,methods from user_types ; TYPE_NAME ATTRIBUTES METHODS - - - ADD

53、RESS_TYPE 3 1 EMPLOYEE_TYPE 3 1 NAME_TYPE 2 0 column type_name format a20 wrap column attributes format 999 wrap column methods format 999 wrap,对象类型信息,查看类属性定义 select attr_name,length,attr_type_name from user_type_attrs where type_name=ADDRESS_TYPE; ATTR_NAMELENGTHATTR_TYPE_NAME - - - CITY20VARCHAR2 STREET 30VARCHAR2 ZIPNUMBER,对象类型信息,查看类方法定义 select type_name , method_nam

温馨提示

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

评论

0/150

提交评论