第1篇 PL/SQL简介

第1章 走进Oracle

第2章 认识PL/SQL

第1章 走进 Oracle

Oracle数据库管理系统由甲骨文公司创建,是目前企业应用最多的数据库之一。SQL语言是所有数据库中操作语言的标准,但是不同的数据库都在SQL语言基础上扩展了适合自己的部分, PL/SQL语言就是Oracle中的SQL语言。本章主要讲解数据库的发展和PL/SQL语言的基础知识。

1.1 数据库系统与数据模型

数据库系统本质上是一个使用计算机存储记录的系统,其本身可被看作一种电子文件柜;也就是说,它是收集计算机数据文件的仓库或容器。系统用户可以对这些文件执行一系列的操作。

1.1.1 基本术语

本节将对数据库中经常使用的一些术语进行简单介绍。

1.数据(Data)

描述事物的符号记录称为数据。数据是数据库中存储的基本对象,其种类很多,主要包括文字、图形、图像、声音等,它们都可以经过数字化后存入计算机。

2.数据库(Database,DB)

数据库,顾名思义,就是存放数据的仓库。过去人们把数据放在文件柜里,现在人们借助计算机和数据库技术,科学地保存和管理大量复杂的数据,以便能方便而充分地利用这些宝贵的信息资源。

所谓数据库就是长期存储在计算机内、有组织、可共享的数据集合,数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户所共享。

3.数据库管理系统(Database Management System,DBMS)

数据库管理系统是指在数据库系统中对数据进行管理的软件系统,它是数据库系统的核心组成部分。数据库系统的一切操作,包括查询、更新以及各种控制,都是通过DBMS进行的。

DBMS总是基于某种数据模型,因此可以把它看成某种数据模型在计算机系统上的具体实现。数据库管理系统是数据库系统的一个重要组成部分,它为用户提供一个方便、有效地存取数据库信息的环境。

4.数据库系统(Database System)

数据库系统是指在计算机中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。应当指出的是,数据库的建立、使用和维护等工作只靠一个DBMS远远不够,还要有专门的人员来完成,这些人被称为数据库管理员(Database Administrator,DBA)。数据库系统的构成如图1.1所示。

图1.1 数据库系统的构成

1.1.2 数据库技术的发展

数据库主要用于数据处理。随着数据处理量的不断增加,数据管理技术应运而生,其演变过程随着计算机硬件和软件的发展,大体经历了文件系统、层次模型和网状模型数据库系统、关系模型数据库系统以及新一代数据库系统几个阶段。

1.文件系统

在数据库系统出现前,数据以文件为单位,与计算机程序脱离,由操作系统统一管理。用户的程序与数据可分别存放在外存储器上,各个应用程序可以共享一组数据,实现了以文件为单位的共享。

由于数据的组织仍然是面向程序的,所以存在大量的数据冗余,且不能方便地修改和扩充数据的逻辑结构。同时,由于文件之间是相互孤立的,因而它们不能反映现实世界中事物之间的联系。文件系统阶段程序与数据的关系如图1.2所示。

图1.2 文件系统阶段程序与数据的关系

2.层次模型和网状模型数据库系统

层次模型和网状模型数据库系统也称为第一代数据库,其先驱是1969年IBM提出的层次数据库模型。该数据库系统以有向图为基础,一次存取一条记录,采用的是过程化的存取方法。简单的层次模型和网状模型数据库系统存储的数据结构如图1.3所示。

图1.3 简单的层次模型和网状模型数据库系统存储的数据结构

3.关系模型数据库系统

关系模型数据库系统也称为第二代数据库,诞生于20世纪70年代。首先由IBM提出了关系模型,奠定了关系数据库技术的基础;而IBM、System R和Berkeley Ingres等系统的出现,标志着关系模型数据库的成熟。

关系模型数据库系统以集合代数为基础,一次一个集合地存取数据,采用的是非过程化的存取方法。目前广泛使用的数据库软件都是基于关系模型的关系数据库管理系统。关系模型是现代数据库产品最广泛实现的模型,而且正是关系模型构成了SQL的基础。

关系模型与以往的模型不同,它是建立在严格的数学概念基础上的。在用户看来,关系模型中数据的逻辑结构是一个二维表,它由行和列组成。现以图1.4所示的学生登记表为例,简单介绍一下关系模型中的一些术语。

图1.4 关系模型的表结构

◆ 关系(Relation):一个关系通常对应一个表,如图1.4所示的表。

◆ 元组(Tuple):表中的一行即为一个元组。

◆ 属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即为属性名;如图1.4所示的表中有6列,对应6个属性(学号、姓名、年龄、性别、系名和年级)。

◆ 主键(Key):表中的某个属性组,可以唯一确定一个元组;如图1.4所示的表中的学号,可以唯一确定一个学生,也就成为本关系的主键。

◆ 域(Domain):属性的取值范围,如人的年龄一般在1~150岁之间,性别的域是(男,女)。

◆ 分量:元组中的一个属性值。

◆ 关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,…,属性n)。例如,上面的关系可描述为:学生(学号,姓名,年龄,性别,系名,年级)。

关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。

4.新一代数据库系统

随着新领域CAD、CAM、地理信息系统(GIS)、知识库系统、实时系统的出现和发展,对数据库系统提出了更高的功能要求,如存储和处理复杂对象,支持复杂数据类型,对常驻内存的对象管理及支持大量对象的存取和计算,实现程序设计语言和数据库语言无缝地集成,支持长事务和嵌套事务的处理等。而传统数据库系统由于其自身的局限性很难实现上述功能,因此提出了新一代数据库技术,即第三代数据库系统的概念。

第三代数据库系统对数据模型有了新的发展。数据库技术与其他相关技术相结合,如与分布处理技术相结合,出现了分布式数据库;与面向对象技术相结合,出现了面向对象数据库等。另外,数据库技术被应用到特定的领域中,出现了许多新的面向领域的数据库技术,如应用于CAD、CAM和CIM等领域的工程数据库、统计数据库和空间数据库等。

总之,第三代数据库系统还处于发展阶段,其研究目标是提出一个支持各种应用领域的统一的数据库系统。

1.1.3 数据模型

数据库中存储的是数据,这些数据反映了现实世界中有意义、有价值的信息,它不仅反映数据本身的内容,而且反映数据之间的联系。那么如何抽象表示、处理现实世界中的数据和信息呢?这就需要使用数据模型这个工具。数据模型是数据库中用于提供信息表示和操作手段的形式框架,它是将现实世界转换为数据世界的桥梁。

数据模型是数据库系统的核心和基础,如前面提到的网状模型、层次模型、关系模型等。各种机器上实现的DBMS软件都是基于某种数据模型的。该模型包括3种基本要素:数据结构、数据操作和完整性约束。

1.数据结构

数据结构是描述系统的静态特性,即组成数据库的对象类型。它包括以下两个方面。

◆ 数据本身:类型、内容、性质。例如,关系模型中的域、属性、关系等。

◆ 数据之间的联系:数据之间是如何相互关联的。例如,关系模型中的主键、外键之间的联系等。

在数据库系统中,一般按数据结构的类型来命名数据模型。

2.数据操作

数据操作描述系统的动态特性,即对数据库中对象的实例允许执行的操作集合,包括操作及操作规则。一般有检索、更新(插入、删除、修改)操作。数据模型要定义操作含义、操作符号、操作规则,以及实现操作的语言。

3.完整性约束

数据的约束条件是完整性规则的集合,规定数据库状态及状态变化所应满足的条件,以保证数据的正确、有效、相容。例如,关系模型中的实体完整性、参照完整性、用户定义完整性等。

1.2 数据库系统的体系结构

从数据库管理角度看,数据库系统通常采用三级模式结构,这是数据库管理系统内部的系统结构;从数据库最终用户角度看,数据库系统的结构分为集中式结构(又可分为单用户结构、主从式结构)、分布式结构、客户/服务器结构,这是数据库系统外部的结构。

1.2.1 数据库系统的三级模式

模式(Schema)是数据库中全体数据的逻辑结构和特征的描述。模式的一个具体值称为它的一个实例,同一模式可以有很多实例。模式是相对稳定的,而实例是相对变动的,因为数据库中的数据是在不断更新的。模式反映的是数据的结构及其联系;而实例反映的是数据库某一时刻的状态。

虽然实际的数据库管理系统产品种类很多,可以支持不同的数据模型,使用不同的数据库语言,建立在不同的操作系统之上,数据的存储结构也各不相同,但它们在体系结构上都具有相同的特征,即采用三级模式结构,并提供两种映像功能。

数据库系统的三级模式结构是指数据库系统由外模式、概念模式、内模式三级构成,如图1.5所示。

图1.5 数据库系统的三级模式结构

1.概念模式(Conceptual Schema)

概念模式又称逻辑模式,是数据库中全体数据的逻辑结构和特性的描述,是所有用户的公共数据视图,它是数据库模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,也与具体的应用程序、所使用的应用开发工具及高级程序设计语言无关。

概念模式实际上是数据库在逻辑上的视图,一个数据库只有一个概念模式。定义概念模式时,不仅要定义数据的逻辑结构,例如,数据记录由哪些数据项组成,以及数据项的名字、类型、取值范围等,而且要定义数据之间的联系,定义与数据有关的安全性、完整性要求。DBMS提供了模式描述语言(模式DDL)来严格地定义模式。

2.外模式(External Schema)

外模式也称子模式或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

外模式通常是模式的子集。一个数据库可以有多个外模式。由于外模式是各个用户的数据视图,如果不同的用户在应用需求、看待数据的方式、对数据保密的要求等方面存在差异,则其外模式描述就是不同的。同一外模式可以被一个用户的多个应用系统所使用,但一个应用程序只能使用一个外模式。

外模式是保证数据库安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。DBMS提供了外模式描述语言(外模式DDL)来严格地定义外模式。

3.内模式(Internal Schema)

内模式也称存储模式(Storage Schema),一个数据库只有一个内模式。内模式是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。例如,记录的存储方式是顺序存储、按照B树结构存储还是按Hash方法存储,索引按什么方式组织,数据的存储记录结构有何规定等。

DBMS提供了内模式描述语言(内模式DDL,或存储模式DDL)来严格地定义内模式。

数据库系统的三级模式是对数据的三个抽象级别,它把数据的具体组织留给DBMS管理,使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中的具体表示方式与存储方式。为了能够在内部实现这三个抽象层次的联系和转换,DBMS在这三级模式之间提供了两层映像,如下所示。

◆ 外模式/概念模式映像。对应于同一个概念模式,可以有任意多个外模式。它定义了某一个外模式和概念模式之间的对应关系,这些映像定义通常包含在各自的外模式中,当概念模式改变时,该映像要做相应的改变(由DBA负责),以保证外模式保持不变。

◆ 概念模式/内模式映像。它定义了数据逻辑结构和存储结构之间的对应关系,说明逻辑记录和字段在内部是如何表示的。这样,当数据库的存储结构改变时,可相应地修改该映像,从而使模式保持不变。

正是这两层映像保证了数据库系统中的数据具有较高的逻辑独立性和物理独立性。

1.2.2 数据库管理系统

数据库管理系统(Database Management System,DBMS)是指数据库系统中对数据进行管理的软件系统,是数据库系统的核心组成部分。数据库系统的一切操作,包括查询、更新以及各种控制,都是通过DBMS进行的。

DBMS是一个庞大的软件系统,包含了一大批支持各种不同功能的软件,这些软件从内容上可以分为以下三大部分。

◆ 数据描述语言(DDL)及其翻译程序。

◆ 数据操纵/查询语言(DML)及其翻译程序。

◆ 数据库管理例行程序。

1.数据描述语言

数据描述语言(Data Description Language,DDL)用于定义数据库的各级数据结构及它们之间的映像,定义各种完整性约束和保密限制条件。为了便于计算机处理,DBMS配置了相应的翻译处理程序,这些程序接受相应的DDL定义,对其进行语法、语义检查,把它们翻译为内部格式存储在数据字典中。DDL翻译程序还根据模式定义负责建立数据库框架,等待装入数据。

2.数据操纵/查询语言

数据操纵语言(Data Manipulation Language,DML)提供用户或应用程序访问数据库系统的接口。DML语句一般是集合型的操作,是一种更高级的数据处理语言。尤其是关系数据库的操作语言,它不需要用户提出如何实现某一种操作,只需用户给出要处理的数据目标和相应的操作类型,系统就可自动实现用户的要求。

在数据操纵方面,有DML处理程序、终端查询语言解释程序、数据存取程序、数据更新程序等,它们用于对用户的操纵请求进行语法、语义检查,并最终完成对数据库的存取操作。

3.数据库管理例行程序

DBMS的真正核心部分是它的运行控制系统,由支持数据库系统全部运行过程的各类例行程序组成。DBMS的组成及工作过程可简单表示为如图1.6所示。

图1.6 DBMS的组成及工作过程

1.2.3 数据库系统的工作流程

数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。下面以用户查询数据库中的一组数据为例,简单介绍一下数据库系统的工作流程,如图1.7所示。

step 1 DBMS首先对数据查询语句进行语法检查,而后从数据字典中找到该用户对应的外模式,同时进行权限检查。若发现错误,则将错误信息返回给用户。

step 2 DBMS根据找到的外模式,利用概念模式/外模式映像,将其映像到概念模式,确定概念模式应该读入哪些数据。

图1.7 数据库系统的工作流程框图

step 3 DBMS利用内模式/概念模式映像,将概念模式映像到内模式,确定数据库应读入哪些物理记录及其具体的地址。

step 4 DBMS根据地址信息向操作系统发出读取记录的命令。

step 5 操作系统执行读取数据的命令,并将数据从硬盘读入系统缓冲区,将执行结果通知DBMS。

step 6 DBMS根据查询语句及数据字典定义的信息,将系统缓冲区中的数据转换成用户所需的记录格式。

step 7 DBMS将数据记录从系统缓冲区传送到用户工作区。

由此可见,在数据库系统中,数据库管理系统处于中心地位。

1.3 关系数据库的简单介绍

DBMS并不是直接读取数据库中的数据,而是通过操作系统访问数据库,数据库系统是基于操作系统的。

所谓关系数据库是指以关系数据模型为基础的数据库系统。目前,基于关系数据模型(关系系统)的数据库管理系统仍然在数据库市场上占据主导地位,最主要的产品包括:IBM公司的DB2、Computer Associates International公司的Ingres II、Informix Software公司的Informix Dynamic Server、微软公司的Microsoft SQL Server、Oracle公司的Oracle、Sybase公司的Sybase Adaptive Server等。

关系数据模型最重要的特点之一是具有坚实的数学理论基础。该理论包括两方面内容:其一是关系数据库设计的理论基础——数据依赖与规范化理论;其二是数据库查询的实现与优化理论,这两方面内容构成了数据库设计和应用最重要的理论基础。本节将简单介绍一下数据依赖与关系规范化的理论,这对关系数据库的设计至关重要。

1.3.1 关系数据库的基本特性

关系数据库是基于关系系统的,那么究竟什么是关系系统呢?直观地说,关系系统是下面这样的。

◆ 结构化方面:数据库中的数据对用户来说是表,并且只是表。

◆ 完整性方面:数据库中的表需要满足一定的完整性约束。

◆ 操纵性方面:用户可以使用操作符进行表操作。例如,为了检索数据,需要使用从一个表导出另一个表的操作符。

关系系统和非关系系统的区别在于:关系系统的用户把数据看作表,而且只能是表;非关系系统的用户则把数据看作其他的数据结构,代替或者扩展关系系统中的表结构。

关系是关系系统的核心,是汇集在表结构中行和列的集合。每个关系由一个或多个属性(列)组成,属性将类型相似的数据归纳在一起。属性与关系直接关联,如图1.4所示,其中关系是由学号、姓名、年龄、性别、系名和年级6个属性组成的。数据以元组(行)的方式存储在关系中,每个元组代表相关数据的一个记录。

1.3.2 关系数据库的设计规范

关系数据库是E.F.Codd博士于1970年在“一种存储大型共享数据的关系模型”论文中提出的。一个完美的、完全符合数据库技术的关系数据库系统,需要满足Codd博士提出的12条法则(有关Codd的12条法则以及关系数据库规范设计的范式,本书不作详细介绍)。

关系数据库实际上就是从多种可能的关系组合中,选取一个合适的(或者说性能好的)关系模式集合作为数据库模式。为了对关系模式集合的性能好坏有一个直观的认识,这里用一个实例组成不同的关系模式集合,产生不同的影响,来简单说明数据库模式设计得好与坏。

例如:某校要建立一个数据库来描述学生和系的一些情况,其对象有:学生的学号(S#)、学生的姓名(SNAME)、系的名称(DEPT)、系的负责人(MN)、学生选修的课程名称(CNAME)和学生选修课的成绩(GRADE)。上述对象之间有如下对应关系。

◆ 一个系有若干个学生,但一个学生只属于一个系。

◆ 一个系只有一个负责人。

◆ 一个学生可以选修多门课程,每门课程有若干个学生选修。

◆ 每个学生学习每一门课程有一个成绩。

依据上述情况,可以考虑以下两种数据库模式的选择方案。

方案1:采用一个总的关系模式。

      SA(S#,SNAME,DEPT,MN,CNAME,GRADE)

方案2:采用三个关系模式。

      SB(S#,SNAME,DEPT)
      DT(DEPT,MN)
      SC(S#,CNAME,GRADE)

比较起来,方案1可能带来下列问题。

◆ 数据冗余。如果某个学生选修多门课程,则由于每选修一门课程必须存储一个数据记录。因此,这个学生的姓名及其所在系的信息将被重复保存。

◆ 修改异常或潜在的不一致性。由于数据存储冗余,当更新某些数据项(如学生所在的系)时,一部分涉及的元组就有可能被修改,而另一部分元组却没有修改,这就造成了存储数据的不一致性(比如,一个学生两个系)。

◆ 插入异常。如果一个系刚刚成立,尚无学生;或者虽然有了学生,但尚未安排课程,那么就无法把这个系及其负责人的信息存入数据库。这是因为在关系模式SA中,主关键字为(S#,CNAME),而关系模型的实体完整性约束不允许主关键字属性为空值。因此,在学生未选修课程或系里未分配学生之前,相应元组无法插入。

◆ 删除异常。如果某个系的学生全部毕业了,在删除该系全体学生信息的同时,把这个系及其负责人的信息也一同删除了,这显然是人们所不希望的。

由于存在上述几个问题,方案1不是一个好的数据库模式设计,而在方案2中这些问题都不存在,因而方案2优于方案1。一个好的模式应当不会发生插入异常和删除异常,冗余应尽可能少,从而避免造成更新异常。

上述关系模式中的异常统称为存储异常。现在的问题是,产生这种存储异常的根源何在?

对上例的两个数据库模式方案进行对比研究可以发现,存储异常的存在与每个关系模式内部各属性值之间的内在相关性有直接关系。在关系模式SA中,主关键字为(S#,CNAME),它们的值唯一地决定其他所有属性的值,形成一种函数依赖关系,即属性SNAME、DEPT、MN、GRADE的值都依赖于主关键字。但另一方面,这些属性对于主关键字的函数依赖程度又有所不同,GRADE是真正的函数依赖于主关键字;而SNAME、DEPT的值则实际上只受S#值的影响,与CNAME无关,即只是部分函数依赖于主关键字(S#,CNAME);MN是直接依赖于DEPT,而间接传递依赖于S#,正是这种部分函数依赖和传递函数依赖造成了上述的存储异常。

1.4 认识Oracle 11g R2

Oracle 11g R2是甲骨文公司开发的最新产品,是一款广泛应用于企业的关系型数据库。它在以前的产品基础上,从功能和性能方面都有不同程度的改进,是目前Oracle产品中功能最全的产品。

1.4.1 什么是Oracle 11g R2

Oracle 11g R2是目前使用比较多的一个版本,也是最新的Oracle版本。在Oracle的官方网站www.oracle.com上可以获取Oracle的相关信息。Oracle 11g R2企业版提供了业界领先的性能,如可扩展性、安全性和可靠性。Oracle 11g R2支持的操作系统比较广泛,主要有:

◆ Microsoft Windows(32位)

◆ Microsoft Windows(x64)

◆ Linux(x64)

◆ Solaris(SPARC)(64位)

◆ Solaris(x86-64)

◆ HP-UX Itanium

◆ HP-UX PA-RISC(64位)

◆ AIX (PPC64)

本书采用Windows 7(32位)的计算机系统,Oracle版本是Microsoft Windows(32位)Oracle 11g R2。

1.4.2 Oracle的发展历程

Oracle的创始人是劳伦斯-埃里森,但是Oracle数据库并不是他一个人创建的,而是由他组建的公司共同创建的,后来把创建该数据库的这个公司就命名为Oracle,也就是大家熟知的甲骨文公司。

1979年,RSI发布了Oracle第2版产品。该产品作为早期的关系数据库系统,被引用作为第一个被商业销售的产品。

1983年,RSI发布了Oracle第3版。这个版本是使用C语言重新编写的版本,并具有了可移植性。

1984年,Oracle公司发布了第4版。该版本支持读一致性。

1985年,Oracle公司发布了第5版。该版本的数据库是可以在Client/Server模式下运行的RDBMS产品。

1986,Oracle公司发布了版本5.1。该版本开始支持分布式查询。

1988年,Oracle公司发布了第6版。该版本引入了行级锁这个重要的特性;此外,还引入了联机热备份功能。

1992年,Oracle公司发布了第7版。该版本支持参照完整性、存储过程、触发器。

1997年,Oracle公司发布了第8版。该版本支持面向对象的开发及新的多媒体应用。

1999年,Oracle公司正式发布了Oracle 8i。“i”代表Internet,顾名思义,在该版本中添加了大量为支持Internet而设计的特性,并且为数据库用户提供了全方位的Java支持。

2001年,Oracle公司发布了Oracle 9i。该版本加入了Oracle集群服务器。

2002年,Oracle公司发布了Oracle 9i数据库第2版。

2003年,Oracle公司发布了Oracle 10g。“g”代表“grid(网格)”。该版本最大的特性就是加入了网格计算功能。

2007年,Oracle公司发布了Oracle 11g,功能大大加强。该版本也是目前最新的Oracle版本,可以说是一个比较稳定的版本。此版本大幅度提高了系统性能的安全性,并利用最新的数据压缩技术降低了数据存储支出。

2009年,Oracle公司发布了Oracle Database 11g Release 2,具有可以优化企业应用的性能、可用性和安全性。

1.4.3 Oracle 11g R2的新特性

Oracle 11g R2引入了许多新特性,主要体现在数据库管理部分、PL/SQL部分以及其他部分,详细说明如下所示。

1.简化软件组合

Oracle 11g R2数据库提供了一个集成解决方案所有信息管理需求的平台,它可以在所有开放的系统平台上支持所有主要的第三方应用程序。除了关系数据,它还存储文件、XML、多媒体文件以及位置和空间信息,它支持高级数据类型,如RFID标签,并建置医疗图像和语义数据。

2.Oracle 11g R2的ASM

Oracle 11g R2的ASM加入了集群。为了提高这些集群关键文件的存活能力,Oracle 11g R2正式引入了一种新的集群文件系统,称之为ASM集群文件系统(ACFS),ACFS可以为OCR文件和磁盘提供更好的保护。

3.其他新特性

其他新特性还有降低存储成本,通过网格整合使服务器成本减少5倍,消除未使用的冗余,提高了数据仓库性能等。

1.5 小结

本章主要介绍了数据库系统与数据模型、数据库系统的体系结构以及关系数据库,还认识了Oracle的发展历程以及Oracle 11g R2新特性。其中,着重讲解了数据库的三级模式、数据库系统工作流程、关系数据库的基本特性以及设计规范,这也是Oracle数据库要遵守的规范。