首页>参考读物>计算机科学与技术>数据库

Oracle8i PL/SQL 高级程序设计
作者 : Scott Urman
译者 : 刘谦 苏建平
丛书名 : Oracle技术丛书
出版日期 : 2001-02-01
ISBN : 7-111-08599-X
定价 : 98.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 691
开本 : 16开
原书名 : Oracle 8i Advanced PL/SQL Programming
原出版社: McGraw-Hill
属性分类: 店面
包含CD :
绝版 : 已绝版
图书简介

本书原版是机械工业出版社已翻译出版的 《Oracle8 PL/SQL程序设计》的修订版。本书充分利用Oracle公司认可的内部技术信息,为读者开发健壮的基于Web的PL/SQL应用提供了功能强大的工具。书中集中介绍了包括动态SQL、外部例程、对象、集合在内的所有Oracle8i数据库的最新功能。除此之外,还为读者提供了开发PL/SQL应用所需的程序跟踪和调试技术。随书提供的光盘还向读者免费提供了4种PL/SQL开发环境工具包的试用版本。本书适合有PL/SQL使用经验,并想深入了解Oracle8i提供的PL/SQL最新功能的程序设计人员阅读。

图书前言

Oracle是一种功能异常强大和灵活的关系型数据库系统,然而,随着Oracle数据库功能的不断发展,使得数据库的使用变得愈来愈复杂。为了设计基于Oracle数据库系统的应用,我们有必要了解Oracle数据库系统对其存储在系统中的数据的处理方法。Oracle提供的专门用于处理数据的PL/SQL是一种重要的工具,它不仅可以处理Oracle内部的数据,而且还可以用于用户的应用程序。PL/SQL可以用在不同的环境并具有不同的特点。

我写的第一本有关PL/SQL的专著是1996年出版的“Oracle PL/SQL程序设计”一书,该书的内容是针对Oralce7.3版本的PL/SQL 2.3编制的。1997年,我又对该书的内容进行了扩充,增加了有关Oracle8.0的最新信息,出版了该书的第2版,即《Oracle8 PL/SQL程序设计》(该书已由机械工业出版社翻译出版。—编者注)。

本书是“Oracle PL/SQL程序设计”一书的第3版。书中涉及了Oracle数据库最新版本Oracle8i(与Oracle8.1版相对应)的有关内容。由于篇幅的限制,本书不能覆盖前两版的全部内容,而是集中介绍了PL/SQL的最新功能。如果读者是第一次接触PL/SQL,最好先从本书的前两版开始学习,我认为这是了解PL/SQL的最好的途径。本书的部分内容来自于《Oracle8 PL/SQL程序设计》,但主要内容是介绍Oracle8i的最新技术。如果读者想深入了解Oracle8i的话,本书可为你提供最详尽的信息。

本书的特点

本书的最大特点是集中介绍Oracle8i的最新技术进展。书中自始至终都贯穿了对Oracle8i提供的最新数据库功能的讨论,例如,第8章就集中介绍了动态SQL技术,包括DBMS_SQL包和Oracle8i提供的最新的本地动态SQL的内容。除此之外,本书还深入讨论了有关PL/SQL开发及调试环境的各种问题。

本书附带的CD-ROM

本书的CD-ROM包括下列三类信息:

带有本书演示的所有案例的在线代码。在有些情况下,书中使用的程序案例只是CD-ROM中完整代码的某一部分。如果想要了解这些程序的完整代码,读者可以参考CD-ROM中提供的代码。

带有来自四个开发商提供的五种不同开发工具的试用版。书中的开发工具分别来自于Quest Software、Compuware Corporation、Embarcadero Technologies以及Sylvain Faust International公司。本书的第2章和第3章将专门讲解这些开发工具的使用细节。

包括了第15章和第16章以及附录A~C的电子版文档。除此之外,本书第12章中的某些图形也存储在CD-ROM中供读者参考。

当读者在微软的视窗操作系统下放入本书的CD-ROM时,CD-ROM携带的启动程序将自动提示读者如何安装CD-ROM中的各种开发工具。对于在使用这些开发工具时遇到的任何问题,读者可以直接与开发商联系解决,请在联系时告之开发商所使用的是源自本书的试用版本。有关进一步的信息,请浏览CD-ROM根目录下的超文本文档readme.html。

本书适用的读者

本书既可以作为Oracle8i PL/SQL的用户手册,也可以作为PL/SQL语言参考资料。如果读者已经有使用PL/SQL的经验并有兴趣深入学习Oracle8i提供的有关PL/SQL的新的高级功能,本书是非常适用的教材。如果读者没有接触过PL/SQL语言,我建议读者在阅读了第2版《Oracle8 PL/SQL程序设计》后再来看本书。尽管这两本书的内容有些相互重叠,但我认为这是全面了解PL/SQL的最好方式。

如何使用本书

本书共分为16章和4个附录。

第一部分:PL/SQL介绍及开发环境

本书的第一部分首先介绍了PL/SQL语言及其运行环境。重点介绍CD-ROM提供的PL/SQL开发环境。

第1章:PL/SQL介绍

本章介绍PL/SQL的基本功能,并重点描述该语言的某些主要特点。除此之外,本章还就PL/SQL的版本与数据库版本的对应关系进行了说明,并对本书中作为数据库应用案例使用的数据库模式进行说明。

第2章:PL/SQL开发和运行环境

PL/SQL可以以客户或服务器方式在多种不同的环境下运行。我们将在本章讨论PL/SQL引擎的不同配置,并讲解这些不同引擎间的通信机制。除此之外,我们还要分析CD-ROM中的有关开发工具和屏幕快照。

第3章:跟踪和调试

本章讨论七种包括CD-ROM提供的图形调试器在内的调试应用程序的不同技术。本章将使用所讨论的每一种调试技术来解决PL/SQL程序中的常见问题。另外,本章还将介绍包括Oracle8i提供的最新工具Profiler在内的跟踪应用程序的几种不同的方法。

第二部分:非对象功能

这一部分主要介绍PL/SQL的关系特性,其中包括过程、触发器、数据库任务、文件输入输出、动态SQL、会话间通信和外部例程等。在这一部分的最后一章还将总结Oracle8i为PL/SQL提供的最新功能。

第4章:创建子程序和包

子程序(包括过程和函数)提供了将PL/SQL代码组织成为可调用的命名块的强大功能,这些可调用命名块可以存储在数据库中供程序调用。包是一组由相关子程序和声明语句组成的程序存储单位。本章的主要内容是详细讨论创建子程序和包的语法结构。

第5章:使用子程序和包

第5章的内容是第4章的延续,本章主要讨论子程序和包的其他特性,包括从SQL语句调用子程序和包的方法以及子程序和包之间的依赖性。除此之外,我们还将讨论包与共享缓冲区之间的交互方式和Oracle 8i提供的如调用权过程等新增的功能。

第6章:数据库触发器

触发器是一种特殊类型的PL/SQL块,这种PL/SQL块可以在触发事件发生时自动运行。触发事件可以是一个如插入语句类的DML操作,也可以是一个DDL语句,或者是一个系统事件。触发器也可以独立于给定的DML语句单独运行。本章将讨论所有类型的触发器。

第7章:数据库作业和文件输入输出

包DBMS_JOB允许程序员以存储过程的形式调度PL/SQL作业在指定的时间自动运行。包UTL_FILE允许PL/SQL读写操作系统文件。本章将结合程序案例详细讨论这两种包。

第8章:动态SQL

动态SQL是一种可以用来编制功能非常灵活的应用的强有力的程序设计技术。我们在本章将讨论有关包DBMS_SQL和动态SQL语言,这两种工具都可以在运行时直接创建,并发布SQL语句和PL/SQL块。采用这种方法设计的程序可以克服以往在PL/SQL块中只能使用DML语句的限制。

第9章:会话间通信

Oracle8i中提供了两个内置的用于数据库会话间直接进行通信的程序包,它们是DBMS _PIPE和DBMS_ALERT。我们将在本章看到一些使用这两个包的程序实例,并对这两个包提供的功能进行比较。

第10章:外部例程

使用外部例程可以让程序员从PL/SQL中直接调用使用C语言语句(要使用Oracle8以上的版本)或Java语言语句(要求使用Oracle8i以上的版本)编制的函数。调用时,C子程序运行在一个独立的进程中,而Java子程序则被装入数据库中并由Oracle8i内置的Java虚拟机Jserver控制在一个PL/SQL进程中运行。本章的主要任务就是详细讨论这两种外部例程。

第11章:Oracle8i的其他功能

本章将全面总结Oracle8i PL/SQL提供的所有最新功能。我们将仔细地分析那些尚未介绍的全新的功能特点以及由此而使系统性能即时得以提升的效果。

第三部分:对象功能和LOB

该部分集中介绍Oracle8和Oracle8i的对象功能,同时还将讨论大型对象(LOB),这些大型对象使用户能在单一数据库列中存储多达4GB的数据。

第12章:引入对象

本章将讨论在Oracle8i中声明对象类型以及如何初始化对象实例和调用方法的语法及语义。除此之外,我们还要介绍一下Oracle8i提供的静态方法。

第13章:数据库中的对象

本章也是介绍数据库对象,其主要内容涉及如何在数据库中存储对象以及如何使用SQL语言和PL/SQL语言来操作对象。除此之外,本章还将讨论对象引用及其使用方法。

第14章:集合

Oracle8i中的集合就是指一组相关的PL/SQL对象,包括索引表、嵌套表和变长数组。这些数据类型类似于其他程序设计语言中的数组结构。本章主要讨论在数据库中存储嵌套表、变长数组以及集合的方法。

第四部分:大型对象和包DBMS_LOB

第15章:大型对象

Oracle支持的大型对象LOB可以用来存储代表不同字符集的字符和二进制数据。本章主要讨论不同类型的LOB以及访问LOB的接口,特别是将详细分析SQL用于LOB的接口。

第16章:高级LOB内容和DBMS_LOB

本章将继续讨论大型对象LOB。主要将详细讨论包DBMS_LOB,该包可提供从PL/SQL块中对LOB实施操作的主要方法。由于该包是一个用PL/SQL实现的包,所以它可以在任何可以发布PL/SQL块的环境下使用。

第五部分:附录

附录中提供了使用PL/SQL有关参考信息。

附录A:Oracle内置程序包指南

附录A将讨论所有Oracle内置的程序包。通过讨论,我们可以看到这些内置的程序包极大地扩展了PL/SQL语言的能力。除此之外,本附录还将对本书中没有介绍的其他程序包进行总结。

附录B:PL/SQL保留字

本附录列出了PL/SQL使用的所有保留字。用户程序中使用的变量名和PL/SQL中使用的对象都要避免使用这些保留字。

附录C:数据字典

本附录对多个数据字典视图进行了总结,并将详细讨论与PL/SQL有关的视图,对于其他的视图将只进行简单介绍。

附录D:本书CD-ROM介绍

附录D介绍了本书CD-ROM中的内容。

本书英文原书书号:ISBN 0-07-212146-7。

作者简介

Scott Urman:暂无简介

译者简介

刘谦 苏建平:暂无简介

译者序

本书是深入介绍PL/SQL 语言的专著。可供数据库系统管理员和应用系统设计师参考。众所周知,PL/SQL是实现从各种平台访问Oracle数据库的高级程序设计语言。本书原版自出版以来,深受专业人员欢迎,仅在美国市场的销售量就多达46 000多本。它不仅为开发健壮的、基于Web的应用提供了深入的信息,而且随书附带的CD-ROM中还为读者提供了样本代码,以及第三方提供的Oracle开发工具。

书中全面介绍了PL/SQL语言的包、触发器、动态SQL、外部例程、对象、集合等基本概念,而且还集中讨论了Oracle8i提供的最新功能。这些新的特性包括如何使用内置包,优化策略,以及PL/SQL程序的调试技术等。本书从以下几个方面深入介绍了Oracle8i程序设计的最新特点:

1) Oracle8i和PL/SQL提供的高效开发和运行环境。

2) 使用包DBMS_DEBUG和 DBMS_TRACE跟踪调试PL/SQL应用。

3) 使用包DBMS_JOB调度PL/SQL任务在指定时间自动运行。

4) 使用包UTE_FILE直接读写操作系统文件。

5) 使用Pro*C和嵌入SQL语言编制外部例程。

6) 使用动态SQL语言在运行时创建并执行SQL和PL/SQL语句。

7) 允许数据库管道与警告之间进行交互会话,等等。

本书由刘谦、苏建平、王军平、刘丽云、李新、李江月、张君哲、钱云共同翻译完成,由刘谦审校。由于本书内容较新,篇幅较长,再加上译者的时间和水平有限,在翻译过程中难免有疏漏和错误,敬请读者给予批评指正。

译  者

2000年7月

图书目录

贺辞

译者序
前言
第一部分  PL/SQL介绍及开发环境
第1章  PL/SQL介绍 1
1.1  为什么要引入PL/SQL语言 1
1.1.1  PL/SQL与网络传输 3
1.1.2  PL/SQL标准 3
1.2  PL/SQL的特点 4
1.2.1  PL/SQL的基本特点 4
1.2.2  PL/SQL的高级功能 7
1.2.3  PL/SQL内置包 11
1.3  本书的约定 11
1.3.1  PL/SQL和Oracle 数据库版本说明 11
1.3.2  Oracle数据库文档 13
1.3.3  本书提供的CD-ROM内容简介 13
1.4  本书案例使用的通用数据库表 14
1.5  小结 21
第2章  PL/SQL开发和运行环境 22
2.1  应用模式和PL/SQL 22
2.1.1  两层模式 22
2.1.2  三层模式 26
2.2  PL/SQL开发工具介绍 26
2.2.1  SQL*Plus 27
2.2.2  Rapid SQL 33
2.2.3  XPEDITER/SQL 35
2.2.4  SQL Navigator 38
2.2.5  TOAD 40
2.2.6  SQL-Programmer 42
2.2.7  PL/SQL开发工具小结 44
2.3  小结 45
第3章  跟踪和调试 46
3.1  问题分析 46
3.1.1  调试指导原则 46
3.1.2  调试程序包 47
3.2  非图形调试技术 47
3.2.1  在程序中插入调试用表 47
3.2.2  将结果打印到屏幕 56
3.3  PL/SQL调试器 65
3.3.1  PL/SQL调试器功能概述 65
3.3.2  问题3 66
3.3.3  问题4 71
3.3.4  问题5 77
3.3.5  问题6 81
3.3.6  问题7 85
3.4  跟踪和配置 89
3.4.1  基于事件的跟踪 92
3.4.2  基于PL/SQL的跟踪 105
3.4.3  基于PL/SQL的配置 110
3.5  小结 113
第二部分  非对象功能
第4章  创建子程序和包 115
4.1  过程和函数 115
4.1.1  创建子程序 116
4.1.2  过程和函数的撤消 120
4.1.3  子程序参数 120
4.1.4  过程与函数的比较 136
4.2  包 137
4.2.1  包的说明 137
4.2.2  包体 138
4.2.3  包和作用域 140
4.2.4  重载打包子程序 143
4.2.5  包的初始化 145
4.3  小结 147
第5章  使用子程序和包 148
5.1  子程序位置 148
5.1.1  存储子程序和数据字典 148
5.1.2  本地子程序 150
5.1.3  存储子程序和本地子程序的比较 155
5.2  存储子程序和包的几个问题 155
5.2.1  子程序的相关性 155
5.2.2  包运行时状态 165
5.2.3  特权和存储子程序 171
5.3  在SQL语句中使用存储函数 180
5.3.1  纯层 180
5.3.2  默认参数 186
5.3.3  从Oracle8i的SQL语句中调用函数 186
5.4  包的辅助功能 189
5.4.1  共享缓冲区锁定 189
5.4.2  包体长度的限制 190
5.4.3  优化参数 191
5.5  小结 194
第6章  数据库触发器 195
6.1  触发器的类型 195
6.1.1  DML触发器 195
6.1.2  替代触发器 196
6.1.3  系统触发器 197
6.2  创建触发器 198
6.2.1 创建DML触发器 198
6.2.2  创建替代触发器 207
6.2.3  创建系统触发器 212
6.2.4  其他触发器问题 217
6.2.5  触发器与数据字典 222
6.3  变异表 223
6.3.1  变异表案例介绍 225
6.3.2  变异表错误的处理 226
6.4  小结 228
第7章  数据库作业和文件输入输出 229
7.1  数据库作业 229
7.1.1  后台进程 229
7.1.2  运行作业 230
7.1.3  其他的DBMS_JOB子程序 235
7.1.4  在数据库视图中观察作业 238
7.1.5  作业运行环境 238
7.2  文件输入输出 239
7.2.1  安全 239
7.2.2  UTL_FILE引发的异常 240
7.2.3  打开和关闭文件 240
7.2.4  文件输出 242
7.2.5  文件输入 245
7.2.6  文件操作案例 245
7.3  小结 255
第8章  动态SQL 256
8.1  在PL/SQL中使用SQL语句 256
8.1.1  静态SQL与动态SQL的比较 257
8.1.2  DBMS_SQL包概述 258
8.1.3  本地动态SQL概述 261
8.2  使用DBMS_SQL 263
8.2.1  执行DML、DDL以及ALTER
SESSION语句 263
8.2.2  执行查询语句 269
8.2.3  执行PL/SQL语句 277
8.2.4  Oracle8和Oracle8i数据库中
DBMS_SQL功能的扩充 281
8.2.5  其他过程 296
8.3  使用本地动态SQL 299
8.3.1  执行非查询语句和PL/SQL块 299
8.3.2  执行查询语句 306
8.4  常见问题 313
8.4.1  动态SQL的特权和角色 313
8.4.2  调用者的权限 315
8.4.3  DDL和动态SQL 317
8.4.4  ALTER SESSION和动态SQL 318
8.4.5  DBMS_SQL和本地动态SQL的比较 319
8.5  小结 324
第9章  会话间通信 325
9.1  DBMS_PIPE 325
9.1.1  发送消息 330
9.1.2  接收消息 332
9.1.3  创建和管理管道 333
9.1.4  权限和安全 335
9.1.5  建立通信协议 336
9.1.6  案例介绍 337
9.2  DBMS_ALERT 344
9.2.1  发送警报 345
9.2.2  接收警报 345
9.2.3  其他过程 346
9.2.4  警报和数据字典 347
9.3  DBMS_PIPE和DBMS_ALERT的比较 348
9.4  小结 349
第10章  外部例程 350
10.1  引入外部例程的必要性 350
10.1.1  外部例程举例 350
10.1.2  外部例程的结构 355
10.2  C外部例程 358
10.2.1  调用步骤 358
10.2.2  参数映射 364
10.2.3  C外部函数 379
10.3  Java外部例程 381
10.3.1  创建步骤 381
10.3.2  参数映射 390
10.3.3  Java外部函数 396
10.3.4  Java存储过程和Oracle JServer 397
10.4  数据库回调 403
10.4.1  C语言服务程序 403
10.4.2  在外部例程中执行SQL语句 408
10.4.3  数据库回调的限制 412
10.5  常见问题 413
10.5.1  外部例程的其他位置 414
10.5.2  调用者和定义者的权限 416
10.5.3  外部例程的相关性 423
10.5.4  调试外部例程 426
10.5.5  指导原则 430
10.5.6  限制 430
10.6  小结 431
第11章  Oracle8i的新增功能 432
11.1  新增功能概述 432
11.1.1  性能 432
11.1.2  应用程序开发 434
11.1.3  Web和外部例程的集成 436
11.2  新的特点 437
11.2.1  批量绑定 437
11.2.2  自动事务 446
11.2.3  错误信息“Numeric or Value Error”
的含义 454
11.2.4  CALL语句 455
11.3  性能比较 457
11.3.1  批量绑定性能比较 459
11.3.2  NOCOPY限定符 461
11.3.3  本地动态SQL 462
11.4  小结 464
第三部分  对象功能和LOB
第12章  引入对象 465
12.1  引入对象的背景 465
12.1.1  面向对象程序设计的基础 465
12.1.2  关系对象数据库 468
12.2  对象类型 469
12.2.1  定义对象类型 469
12.2.2  声明和初始化对象 472
12.2.3  对象的方法 474
12.2.4  变更及撤消类型 496
12.2.5  对象的相关性 498
12.3  小结 499
第13章  数据库中的对象 500
13.1  Oracle8 数据库中的对象 500
13.1.1  对象定位 500
13.1.2  对象标识和引用 504
13.1.3  对象类型和表之间的相关性 505
13.2  对象和SQL 506
13.2.1  访问列对象 506
13.2.2  访问行对象 511
13.2.3  Refs和Values 516
13.2.4  有关对象的其他问题 525
13.3  小结 526
第14章  集合 527
14.1  声明和使用集合类型 527
14.1.1  索引表 527
14.1.2  嵌套表 531
14.1.3  变长数组 534
14.1.4  不同集合类型间的比较 537
14.2  集合方法 538
14.2.1  方法EXISTS 539
14.2.2  方法COUNT 540
14.2.3  方法LIMIT 541
14.2.4  方法FIRST和LAST 542
14.2.5  方法NEXT和PRIOR 542
14.2.6  方法EXTEND 543
14.2.7  方法TRIM 545
14.2.8  方法DELETE 547
14.3  数据库中的集合 549
14.3.1  存储集合的隐含 549
14.3.2  操作整个集合 553
14.3.3  处理单个集合元素 558
14.4  小结 564
第四部分  大型对象和包DBMS_LOB
第15章  大型对象 565
15.1  什么是LOB 565
15.1.1  LOB的存储 566
15.1.2  LOB的类型 567
15.1.3  临时LOB 569
15.1.4  LOB接口 569
15.2  SQL 访问 580
15.2.1  内部LOB和SQL 580
15.2.2  外部LOB和SQL 586
15.3  其他LOB问题 588
15.3.1  LOB和触发器 588
15.3.2  发布LOB 589
15.3.3  说明LOB存储 589
15.4  小结 590
第16章  高级LOB内容和DBMS_LOB 591
16.1  包DBMS_LOB 591
16.1.1  包LOBUtils 591
16.1.2  包DBMS_LOB的子程序 593
16.1.3  读写LOB数据 597
16.1.4  BFILE 614
16.1.5  打开和关闭LOB 619
16.1.6  临时LOB 621
16.1.7  DBMS_LOB预定义的异常 624
16.2  其他LOB内容 624
16.2.1  定位指针的读一致性 624
16.2.2  LOB操作和事务 626
16.3  LONG和LOB类型间的转换 630
16.3.1  DBMS_SQL和DBMS_LOB 630
16.3.2  TO_LOB 634
16.4  小结 635
第五部分 附  录
附录A  Oracle内置程序包指南 637
附录B  PL/SQL保留字 670
附录C  数据字典 673
附录D  本书CD-ROM介绍 692

教学资源推荐
作者: (加)Jiawei Han, Micheline Kamber
作者: [比利时]维尔弗里德·勒玛肖(Wilfried Lemahieu) 赛普·凡登·布鲁克(Seppe vanden Broucke) 巴特·巴森斯(Bart Baesens) 著
作者: (美)Hector Garcia-Molina, Jeffrey D.Ullman, Jennifer Widom
参考读物推荐
作者: (美)Richard Yevich等
作者: (美)Mohamed E1-Mallah
作者: 潘晓 霍峥 孟小峰 编著