`

抽象数据类型

 
阅读更多

一,定义抽象数据类型
/*
create or replace type animal_ty as object
(breedvarchar2(25), --动物种类
name varchar2(25), --名字
birthdatedate, --出生日期
member function AGE(birthdate in date) return number --根据出生日期计算年龄
); --带有方法的抽象数据类型
*/
create or replace type animal_ty as object
(Bread varchar2(25), --动物种类
namevarchar2(25),--名字
hobby varchar2(10) --爱好
);

descanimal_ty;
查看user_types;
user_type_attrs;

二,抽象数据类型的使用

1)创建关系表
droptable animal;
create table animal
(id number primary key,
animaanimal_ty
);
set desc depth 3
desc animal;
2) 插入数据(使用构造方法)
insert intoanimal values(1, animal_ty('MULE','FRANCES','PLAY'));
insert intoanimal values(2, animal_ty('DOG','BENJI','EAT'));
insert intoanimal values(3, animal_ty('CROCODILE','LYLE','SWIM'));

3)操作
查看:select f.anima.name from animal f;
更新: update animal f set f.anima.hobby='PLAY1' where id=1;
删除:delete fromanimal a wherea.anima.hobby='PLAY1';

2,删除对象类型
drop type animal_ty force;

3,查询相关性
select name,type from user_dependencies where referenced_name='ANIMAL_TY';

4,在抽象数据类型上创建索引
create indexIdxon animal(anima.name);

5,final 和 not final 修饰类型
instantiable 和not instantiable可修饰类型和方法

默认情况下,抽象数据类型是不能被继承的,同时类型提供构造函数,类型中的方法可以被实


声明类型加 not final 该类型可被继承
修饰方法: not instantiable 类型不提供方法实现
修饰类型: not instantiable 类型没有构造函数.不能实例化

二,可变数组

1)创建VARRAY类型
create or replace type tools_va as varray(5) of varchar2(25);
2)创建关系表,该表的字段类型是varray类型
create table borrower(name varchar2(25) primary key,
tools tools_va);
字典
selecttypecode,attributes from user_types where type_name='TOOLS_VA';
selectcoll_type,elem_type_owner,elem_type_name,upper_bound,
length from user_coll_types;
3)插入数据
insert into borrower values ('JED HOPKINS',
Tools_va('HAMMER','SLEDGE','AX'));
insert into borrower values('PK',
Tools_va('PEN1','PEN2','PEN3'));
4)查看
select * from table(select t.tools fromborrower t where t.name='PK');

三,嵌套表

drop type emp_ty force;
1,
create or replace type emp_tyas object
( empno number,
ename char(10),
sal number);
2,create or replace type emps_nt as table of emp_ty;

3,
create table ntdept
(
deptno number,
dname varchar2(20),
loc varchar2(20),
dno_det emps_nt)
nested table dno_det store as emp_nt_tab;

--插入数据

insert into ntdept values
(10,'市场部','海珠北路',emps_nt(emp_ty(100,'MARRY',1000),
emp_ty(101,'Lili',1500),
emp_ty(102,'KHK',3000))
);

insert into ntdept values(20,'教务部','海珠南路',emps_nt(emp_ty(103,'JAKE',2200),
emp_ty(104,'ROSE',1000),
emp_ty(105,'LUSU',2000)
));

--查询
可以使用the或table
select deptno,dname,loc,dno_det from ntdept;
selectdno_det from ntdept where deptno=10;
select nt.* from table(select dno_det from ntdept where deptno=10) nt;
select nt.* from table(select dno_det from ntdept where deptno=20) ntwhere

nt.empno=103;
select nt.empno,nt.ename from table(select deptno from ntdept wheredeptno=10)

ntwhere nt.empno=101;
--插入
insert into table(select dno_det from ntdept where deptno=10)

values(106,'HANG',3000);
或从嵌套表中选择数据插入
insert into ntdeptvalues(40,'NEWd','NEWloc',
cast(multiset(select * from table(select dno_det from ntdept where deptno=10)

nt where nt.empno=100 )as emps_nt))

cast:将查询的结果转换成嵌套表的形式
multiset:允许cast查询中包含多条记录

--更新
update table(select dno_det from ntdept where deptno=10) nt set nt.ename='LLLL'

where nt.empno=101;
--删除
delete from the(select dno_det from ntdept where deptno=10) nt where

nt.empno=101

四,对象表

1,建立对象类型
drop type animal_ty force;
create type animal_ty as object
(name varchar2(15),
hobbyvarchar2(20)
)
/
2,建立对象表
create table animal of animal_ty(name constraint pkprimary key);
3,插入数据
insert into animal values(animal_ty('SNAKE','PLAY'));
insert into animal values(animal_ty('DOG','SWIM'));
insert into animal values(animal_ty('CAT','SLEEP'));

4,查看oid
select ref(f) from animal f;

5,查看对象
select value(r) from animal r;


使用deref

drop table keeper;
create table keeper
(
keepernamevarchar2(10),
animalkeptref animal_ty
)

插入数据

insert intokeeper select 'JEK',ref(f) from animal f where name='DOG';
insert intokeeper select 'BLK',ref(f) from animal f where name='CAT';

查看数据
在关系表中看对象
select deref(animalkept) from keeper;

假设删掉一个对象
delete from animal where name='DOG';

select * from keeper;还在引用该对象
update keeper set animalkept=null where animalkept is dangling;--去掉引用

五,对象视图

将dept关系表做为对象表访问

1,建立对象类型

create or replace type dept_type as object
(dno number(2),
dname varchar2(15),
local varchar2(18)
);
2,建立对象视图
create viewdept_viewof dept_typewith object oid
(dno) as
select * fromdept ;

3,通过对象视图操纵关系表数据
insert into dept_viewvalues(dept_type(60,'aaa','bbb'));
delete from dept_view where deptno=60;
结果会反映到关系表中,当改变关系表数据时,也会反映到对象视图中

对象视图每行都有一个oid

4,当关系表之间存在引用关系时,也可以用对象视图实现
dept 和 emp 是主、外键表,emp表的deptno引用了dept表的deptno
并且已为关系表dept生成了对象视图,此时关系表的每一个行都具有oid

dept表的行可以作为行对象通过dept_view视图进行访问,只要为关系表创建
了对象视图,即可将任何关系表作为行对象进行访问

--make_ref只对所提供的参数应用一个Oracle内部的算法,即可得到引用,它并没有真

正读取视图。
select make_ref(dept_view,deptno) from dept;
select make_ref(dept_view,deptno) from emp;

5,通过对象视图建立引用关系

create view emp_ov as select make_ref(dept_view,deptno) dep,empno,ename,sal

from emp;
该视图第一列指向了对象视图dept_view的行

select deref(a.dep)fromemp_ova;

分享到:
评论

相关推荐

    图抽象数据类型的实现(数据结构C语言)

    在计算机科学中,数据结构是组织、存储和处理数据的方式,而抽象数据类型(Abstract Data Type,简称ADT)是对数据类型的逻辑特性的描述,它只关注数据的操作而不涉及具体的实现细节。本压缩包文件“图抽象数据类型...

    KWIC 抽象数据类型实现

    **KWIC 抽象数据类型实现** 在计算机科学中,抽象数据类型(Abstract Data Type,简称ADT)是一种重要的概念,它将数据结构与在该结构上操作的函数结合在一起,形成一个整体。ADT允许程序员关注数据的操作,而不是...

    图的抽象数据类型实现 数据结构实验 广工

    图的抽象数据类型实现 数据结构实验 广工 链表实现

    抽象数据类型:有理数四则运算

    在计算机科学中,抽象数据类型(Abstract Data Type, ADT)是一种高级的编程概念,它定义了一组数据以及这些数据上的操作集。ADT的主要目的是将数据结构与操作数据的方法封装起来,使得用户可以专注于数据的操作,而...

    图的抽象数据类型实现和数据结构课程设计

    本课程设计的主题是“图的抽象数据类型实现和数据结构课程设计”,这是一项深度学习和实践图数据结构及其操作的活动。 首先,我们要理解“抽象数据类型”(Abstract Data Type, ADT)的概念。ADT是一种逻辑上的数据...

    数据结构几种抽象数据类型的实现

    在计算机科学中,数据结构是组织、存储和处理数据的方式,而抽象数据类型(Abstract Data Type,简称ADT)则是对数据结构的一种高级抽象。它定义了一组操作以及这些操作如何作用于一组数据元素上。ADT关注的是数据的...

    数据结构实验:抽象数据类型的实现

    实验项目名称: 抽象数据类型的实现 实验项目性质: 设计性实验 所属课程名称: 数据结构 以教材中讨论的各种抽象数据类型为对象,利用C语言的数据类型表示和实现其中某个抽象数据类型。 本资源包括了可执行文件、源...

    数据结构队列的抽象数据类型

    数据结构队列的抽象数据类型 队列是一种常用的数据结构,它是一种先进先出的数据结构,按照所选元素的顺序进行存储和提取。队列的抽象数据类型是指队列的存储结构和基本操作的实现。 队列的存储结构 在本实验中,...

    数据结构-有理数抽象数据类型.doc

    数据结构中的抽象数据类型(ADT)是一种高级的编程概念,它定义了数据的组织方式以及操作这些数据的方法。在给定的代码中,我们看到了一个实现有理数ADT的例子,即处理分数的类。有理数由两个整数组成,代表分子和...

    polynomial 抽象数据类型

    稀疏多项式抽象数据类型 稀疏多项式抽象数据类型是指使用单链表存储的多项式数据结构,在计算机科学中广泛应用于符号计算、计算机代数系统和数学软件等领域。稀疏多项式抽象数据类型可以分为多项式的表示、多项式的...

    数据结构 C语言 设计集合抽象数据类型

    1. 线性表的抽象数据类型定义为:  ADT LinkList{ 数据对象:D={ | IntSet,i=1,2,…,n,n 0} 数据关系:R1={, >| , D, ,i=2,…,n} 基本操作: InitList(*L) 操作结果:构造一个空的...

    抽象数据类型(三元组ADT、复数四则运算)

    抽象数据类型(ADT,Abstract Data Type)是计算机科学中一个重要的概念,它定义了一组数据和对这些数据的操作集合。ADT不关注具体的实现细节,而是关注如何使用这些数据和操作。它提供了一个高级的、与实现无关的...

    图的抽象数据类型实现

    一、 题目:图的抽象数据类型实现 利用VC++的工作环境实现教材里图的基本抽象数据类型。按照课本的要求运用c语言以及数据结构课程所学的知识,设计合理的数据存储结果,实现图的基本操作。 二、 抽象数据类型定义...

    抽象数据类型三元组的表示和实现

    ### 抽象数据类型三元组的表示与实现 #### 实验目的 - 熟悉抽象数据类型的表示和实现方法。 - 掌握如何通过主函数检验各基本操作函数的正确性。 #### 实验内容 1. **定义三元组抽象数据类型**:定义一个三元组抽象...

    有理数运算【抽象数据类型】

    有理数运算在计算机科学中是一个基础且重要的概念,特别是在抽象数据类型(Abstract Data Type, ADT)的设计和实现中。有理数是由两个整数(分子和分母)表示的分数,通常写为分子除以分母的形式,如3/4。在编程中,...

    有理数抽象数据类型

    通过构造有理数的抽象数据类型,完成有理分数加减乘除和求导操作。

    数据结构实验-抽象数据类型

    "数据结构实验-抽象数据类型"这个项目,显然聚焦于抽象数据类型的实现和应用。 抽象数据类型(Abstract Data Type,简称ADT)是一种高级编程概念,它定义了一组数据以及这些数据上的操作集。ADT关注的是数据的操作...

    设计实现抽象数据类型“复数”

    在计算机科学中,抽象数据类型(Abstract Data Type, ADT)是一种高级的编程概念,它定义了一组数据和对这些数据的操作。ADT允许我们关注数据的逻辑表示,而不是具体的实现细节。在这个实验中,我们将设计一个抽象...

Global site tag (gtag.js) - Google Analytics