北大青鸟oracle学习笔记32

成员函数和过程

构造函数方法
-oracle的每个对象均有一个内置的构造函数方法
-用于创建对象的一个实例
-无需显式地定义
-与对象类型同名

定义对象类型
create or replace
type persontype as object
(
  id int,
  name varchar(20),
  member function getId return int,
  member procedure setId(pid int),
  member function getName return varchar,
  member procedure setName(pname varchar)
)not final


实现对象成员方法
create or replace type body persontype as
  function getId return int as
  begin
    return id;
  end getId;
 
  procedure setId(pid int) as
  begin
    id := pid;
  end setId;
 
  function getName return varchar as
  begin
    return name;
  end getName;
 
  procedure setName(pname varchar) as
  begin
    name := pname;
  end setName

测试对象
declare
  p personType;
begin
  p:=personType(1,'pf');
  --直接访问对象成员变量
  dbms_output.put_line(p.id||'|'||p.name);
  --使用方法访问成员变量 推荐
  dbms_output.put_line(p.getId()||'|'||p.getName());
  --使用set方法更改对象成员变量值
  p.setId(2);
  p.setName('lmj');
  dbms_output.put_line(p.getId()||'|'||p.getName());
end;

输出:
1|pf
1|pf
2|lmj

很尴尬的发现最后一部视频的后半部分和前半部分是一样的。。。囧。。。嵌套表没有讲。。。

网上搜了一下嵌套表的资料,如下:

一、嵌套表的定义:

嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一个包含部门信息的表,在任何时间内每个部门会有很多项目正在实施。在一个严格的关系模型中,将需要建立两个独立的表department和project。

嵌套表允许在department表中存放关于项目的信息。勿需执行联合操作,就可以通过department表直接访问项目表中的记录。这种不经联合而直接选择数据的能力使得用户对数据访问更加容易。甚至在并没有定义方法来访问嵌套表的情况下,也能够很清楚地把部门和项目中的数据联系在一起。在严格的关系模型中,department和project两个表的联系需要通过外部关键字(外键)关系才能实现。

二、举例说明嵌套表的使用:

假设有一个关于动物饲养员的表,希望其中具有他们饲养的动物的信息。用一个嵌套表,就可以在同一个表中存储饲养员和其饲养的全部动物的信息。

1、创建类型animal_ty:此类型中,对于每个动物都包含有一个记录,记载了其品种、名称和出生日期信息。

CREATE TYPE animal_ty AS OBJECT (

breed varchar2(25),

name varchar2(25),

birthdate date);

2、创建animals_nt:此类型将用作一个嵌套表的基础类型。

CREATE TYPE animals_nt as table of animal_ty;

3、创建表breeder:饲养员的信息表

create table breeder

(breedername varchar2(25),

animals animal_nt)

nested table animals store as animals_nt_tab;

4、向嵌套表中插入记录

insert into breeder

values('mary',animal_nt(animal_ty('dog','butch','31-MAR-97'),

animal_ty('dog','rover','31-MAR-97'),

animal_ty('dog','julio','31-MAR-97')));

insert into breeder

values('jane',animal_nt(animal_ty('cat','an','31-MAR-97'),

animal_ty('cat','jame','31-MAR-97'),

animal_ty('cat','killer','31-MAR-97')));

commit;

5、查询嵌套表

select name,birthdate from

table(select animals from breeder);

select name,birthdate from

table(select animals from breeder

where breedername=’mary’)

where name=’dog’;

三、嵌套表的特点:

1、对象复用:如果编写面向对象的代码,就提高了重用以前编写的代码模块的机会。同样,如果创建面向对象的数据库对象,也就提高了数据库对象能够被重用的机会。

2、标准支持:如果创建标准的对象,那么它们被重用的机会就会提高。如果有多个应用或多个表使用同一数据库对象集合,那么它就是既成事实的数据库对象标准。

3、定义访问路径:对于每一个对象,用户可定义在其上运行的过程和函数,从而可以使数据和访问此数据的方法联合起来。有了用这种方式定义的访问路径,就可以标准化数据访问的方法并提高对象的可复用性。



接下来需要实践一下oracle了,还没想好做个什么东西。希望这学期可以完成。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值