PLSQL数据抽象

本文介绍了数据抽象的概念,通过数据抽象可以提取必要属性并忽略非必需细节,从而更好地解决问题。文中还详细探讨了集合、记录和对象类型等数据结构的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据抽象

数据抽象可以让我们把必要的属性提取出来,忽略那些非必须的细节问题,有助于我们更好地解决问题。一旦我们设计好一个数据结构,就可以不再考虑细节内容,而专注于操作这个数据结构的算法问题的研究。

  • 集合

集合类型TABLEVARRAY可以让我们声明索引表、嵌套表和变长数组(略称varray)。集合是类型相同的元素有序组合。在集合中,每个元素都有唯一一个能够确定该元素在集合中位置的下标索引。下面是嵌套表的一个例子:

DECLARE
  
TYPE staff IS TABLE OF employee;

  staffer   employee;

  
FUNCTION new_hires(hiredate DATE
)
    
RETURN staff IS

  
BEGIN
    ...
  
END;
BEGIN

  staffer    := new_hires(
'10-NOV-98')(5);
  ...
END;

集合有些像三代语言中的数组,并且可以作为参数进行传递。

  • 记录

我们知道,可以使用%ROWTYPE属性获取数据表中一行的记录类型,其实我们还可以定义自己的记录类型。

记录包含名称不可重复的域,域可以有不同的数据类型。假设我们设计了一个雇员记录类型,其中有名字、工资和雇用日期,这些项虽然类型不同,但逻辑上都是相关联的。看一下下面的例子:

TYPE timerec IS RECORD(
  hours     
SMALLINT
,
  minutes   
SMALLINT

);

TYPE meetingtyp IS RECORD(
  date_held   
DATE
,
  DURATION    timerec,   
-- nested record

  LOCATION    
VARCHAR2(20),
  purpose     
VARCHAR2
(50)
);

这里要注意的是,记录里可以嵌套记录类型。也就是说,记录本身也可以作为另一个记录的组成部分。

  • 对象类型

PL/SQL中的面向对象编程是基于对象类型的。对象类型把数据和用于数据操作的函数和过程封装起来。其中,对象类型中的变量称为属性,函数和过程称为方法。对象类型是把大系统划分成多个逻辑实体来降低问题的复杂度,这就能使我们创建模块化、可维护和重用性好的组件了。我们在用CREATE TABLE定义对象类型的时候,常常是创建一个对真实世界对象的抽象的模板。如下面的银行账户例子中显示,模板只指定了应用程序的环境中会使用到的属性和方法:

CREATE TYPE bank_account AS OBJECT(
  acct_number   
INTEGER
(5),
  balance       
REAL
,
  status        
VARCHAR2
(10),
  MEMBER 
PROCEDURE OPEN(amount IN REAL
),
  MEMBER 
PROCEDURE verify_acct(num IN INTEGER
),
  MEMBER 
PROCEDURE CLOSE(num IN INTEGER, amount OUT REAL
),
  MEMBER 
PROCEDURE deposit(num IN INTEGER, amount IN REAL
),
  MEMBER 
PROCEDURE withdraw(num IN INTEGER, amount IN REAL
),
  MEMBER 
FUNCTION curr_bal(num IN INTEGER
)
    
RETURN REAL

);

运行时,当数据结构被赋值之后,我们就可以创建抽象的银行账户了。我们可以按照需求创建任意个实例(称为对象)。每个对象都有账号,余额和状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值