具体描述
编辑推荐
通过阅读本书,读者可以掌握充分使用Oracle PL/SQL语言的相关知识。
本书简明扼要、实用,以几个简单的数据检索示例开篇,然后介绍了更为复杂的主题,包括连接的使用、子查询、正则表达式、基于全文的检索、存储过程、游标、触发器、表约束等内容。
提示指出捷径和解决方案。
警告用来避免常见陷阱。
注意提供额外的概念和信息。
本书涵盖了如下内容:
在Oracle环境和工具中使用PL/SQL;
使用多个子句和运算符构造复杂的PL/SQL语句;
检索、排序和格式化数据库的内容;
使用各种过滤技术准确定位所需数据;
使用字符串、日期-时间和数学函数来操纵数据;
连接两个或多个相关的表;
插入、更新和删除数据;
创建和修改数据表;
处理视图、存储过程、游标、触发器等。 内容简介
PL/SQL是Oracle数据库对SQL语句的扩展,在普通SQL语句的使用上添加了编程语言的特点,在数据库编程领域有着广泛的应用。
《Oracle PL/SQL必知必会》作为《SQL必知必会(第4版)》畅销图书的全新升级版,由浅入深地讲解了Oracle PL/SQL的基本概念和语法,涉及SQL基础知识、Oracle和PL的基本知识、使用Oracle、检索数据、对检索的数据进行排序、过滤数据、高级数据过滤、使用通配符过滤、使用正则表达式执行搜索、创建计算字段、使用数据操作函数、汇总数据、组合数据、使用子查询、连接表、创建高级连接、组合查询、插入数据、更新和删除数据、创建和操作表、使用视图、使用存储过程、使用游标、使用触发器、管理事务处理、管理安全性等内容。
《Oracle PL/SQL必知必会》适合零基础的SQL初学者、刚开始接触Oracle PL/SQL并且想要深入学习的读者阅读。 作者简介
Ben Forta在计算机行业具有30年的从业经验,从事产品设计和开发、支持、培训以及市场营销方面的工作。作为Adobe公司教育计划(Education Initiatives)的高级主管,他花了大量的时间从事Adobe产品相关的教学、讨论和写作工作,以及编码、应用程序开发、创意、数字素养方面的工作,并且积极提供反馈,帮助Adobe确定产品未来的发展方向。
Ben写作了40多本图书,包括世界上畅销的SQL图书,以及其他多种主题的图书,比如正则表达式(Regular Expression)、移动开发和Adobe ColdFusion。这些图书的英文版印刷数量超过了75万册,并且被翻译成15种语言,其中许多图书被世界上的多所学院和大学用作教材。
教育工作是Ben的至爱。除了写作、演讲和课堂实践之外,Ben把他的全部时间都奉献于教学、启迪他人以及分享他对技术和创意的热爱。能够有机会与全世界数百万人分享他的知识,他对此十分感激。
Ben还是一位成功的创业立,具有创立、建设和出售创业公司的经验。他是一位广受欢迎的演说家、作家和博客作者,并向全世界介绍教育和开发方面的主题。 目录
目录
第1章 了解SQL 1
1.1 数据库基础 1
1.1.1 什么是数据库 2
1.1.2 表 2
1.1.3 列和数据类型 4
1.1.4 行 5
1.1.5 主键 5
1.2 什么是SQL 7
1.3 试一试 8
1.4 小结 8
第2章 初识Oracle和
PL/SQL 9
2.1 什么是Oracle 9
2.1.1 客户端—服务器
软件 9
2.1.2 PL/SQL 11
2.1.3 客户端工具 12
2.2 起步 12
2.2.1 你需要什么软件 12
2.2.2 获得软件 14
2.2.3 安装软件 15
2.3 小结 16
第3章 使用Oracle 17
3.1 创建工作环境 17
3.1.1 创建专用的Oracle
实例 18
3.1.2 创建自定义的工作
空间 20
3.2 建立连接 22
3.3 Oracle SQL Developer
简介 24
3.4 创建和填充示例表 25
3.4.1 获得相同的表
脚本 27
3.4.2 创建表 27
3.4.3 填充表 29
3.5 关于Oracle SQL
Developer的更多
讨论 30
3.6 小结 30
第4章 检索数据 31
4.1 SELECT语句 31
4.2 检索单独的列 31
4.3 检索多列 34
4.4 检索所有列 36
4.5 检索特定的行 37
4.6 使用完全限定的表名 39
4.7 使用注释 40
4.8 小结 42
第5章 对检索的数据进行
排序 43
5.1 对数据进行排序 43
5.2 按多个列进行排序 46
5.3 指定排序方向 49
5.4 小结 52
第6章 过滤数据 53
6.1 使用WHERE子句 53
6.2 WHERE子句的
运算符 55
6.2.1 检查单个值 56
6.2.2 检查不匹配的
情况 59
6.2.3 检查值的范围 60
6.2.4 检查没有值的
情况 62
6.3 小结 63
第7章 高级数据过滤 64
7.1 结合WHERE子句 64
7.1.1 使用AND运算符 64
7.1.2 使用OR运算符 66
7.1.3 理解求值顺序 67
7.2 使用IN运算符 70
7.3 使用NOT运算符 73
7.4 小结 74
第8章 使用通配符过滤 75
8.1 使用LIKE运算符 75
8.1.1 利用百分号(%)
通配符执行搜索 76
8.1.2 利用下划线(_)
通配符执行搜索 79
8.2 使用通配符的提示 80
8.3 小结 81
第9章 使用正则表达式执行
搜索 82
9.1 了解正则表达式 82
9.2 使用Oracle PL/SQL
正则表达式 83
9.2.1 基本的字符匹配 84
9.2.2 执行OR匹配 87
9.2.3 匹配多个字符
之一 88
9.2.4 匹配范围 91
9.2.5 匹配特殊字符 92
9.2.6 匹配字符类别 94
9.2.7 匹配多个实例 95
9.2.8 锚 98
9.3 小结 99
第10章 创建计算字段 100
10.1 理解计算字段 100
10.2 连接字段 101
10.3 执行数学计算 106
10.4 小结 109
第11章 使用数据操作
函数 110
11.1 了解函数 110
11.2 使用函数 111
11.2.1 文本操作函数 111
11.2.2 日期和时间操作
函数 115
11.2.3 数值操作函数 120
11.3 小结 120
第12章 汇总数据 121
12.1 使用聚合函数 121
12.1.1 AVG()函数 122
12.1.2 COUNT()函数 124
12.1.3 MAX()函数 126
12.1.4 MIN()函数 127
12.1.5 SUM()函数 128
12.2 独特值上的聚合 130
12.3 同时使用多个聚合
函数 131
12.4 小结 132
第13章 分组数据 133
13.1 了解数据分组 133
13.2 创建分组 134
13.3 过滤分组 136
13.4 分组和排序 140
13.5 SELECT子句排序 143
13.6 小结 143
第14章 使用子查询 144
14.1 了解子查询 144
14.2 通过子查询过滤 144
14.3 把子查询用作计算
字段 150
14.4 小结 154
第15章 连接表 155
15.1 了解连接 155
15.1.1 了解关系表 155
15.1.2 为什么要使用
连接 157
15.2 创建连接 158
15.2.1 WHERE子句的
重要性 160
15.2.2 使用内连接 166
15.2.3 连接多个表 167
15.3 小结 170
第16章 创建高级连接 171
16.1 使用表别名 171
16.2 使用不同的连接
类型 172
16.2.1 自连接 173
16.2.2 自然连接 176
16.2.3 其他连接 177
16.3 结合使用连接与
聚合函数 180
16.4 使用连接和连接
条件 182
16.5 小结 183
第17章 组合查询 184
17.1 了解组合查询 184
17.2 创建组合查询 185
17.2.1 使用UNION 185
17.2.2 UNION规则 188
17.2.3 包括或消除
重复的行 189
17.2.4 对组合查询的
结果进行排序 191
17.3 小结 193
第18章 插入数据 194
18.1 了解数据插入 194
18.2 插入完整的行 195
18.3 插入检索的数据 200
18.4 小结 203
第19章 更新和删除数据 204
19.1 更新数据 204
19.2 删除数据 207
19.3 更新和删除数据的
指导原则 208
19.4 小结 209
第20章 创建和操作表 210
20.1 创建表 210
20.1.1 创建表的基础
知识 211
20.1.2 处理NULL值 213
20.1.3 指定默认值 215
20.2 更新表 216
20.2.1 再论主键 217
20.2.2 定义外键 218
20.3 删除表 220
20.4 重命名表 220
20.5 小结 221
第21章 使用视图 222
21.1 了解视图 222
21.1.1 为什么要使用
视图 223
21.1.2 视图的应用
规则 224
21.2 使用视图 225
21.2.1 使用视图简化
复杂的连接 225
21.2.2 使用视图重新格式
化检索的数据 227
21.2.3 使用视图过滤
多余的数据 229
21.2.4 结合使用视图与
计算字段 231
21.2.5 更新视图 233
21.3 小结 234
第22章 使用存储过程 235
22.1 了解存储过程 235
22.2 为什么要使用存储
过程 236
22.3 使用存储过程 238
22.3.1 基本的存储过程
语法 238
22.3.2 在存储过程中
使用编程构造 239
22.3.3 构建智能存储
过程 241
22.3.4 删除存储过程 245
22.4 小结 245
第23章 使用游标 246
23.1 了解游标 246
23.2 使用游标 247
23.2.1 创建游标 248
23.2.2 打开和关闭
游标 248
23.2.3 获取游标数据 250
23.2.4 使用游标数据 253
23.3 小结 256
第24章 使用触发器 257
24.1 了解触发器 257
24.2 创建触发器 258
24.3 删除触发器 259
24.4 使用触发器 260
24.4.1 INSERT触发器 260
24.4.2 DELETE
触发器 263
24.4.3 UPDATE
触发器 266
24.4.4 多事件触发器 267
24.4.5 关于触发器的
更多知识 268
24.5 小结 268
第25章 管理事务处理 269
25.1 了解事务处理 269
25.2 控制事务 272
25.2.1 使用
ROLLBACK 272
25.2.2 使用COMMIT 273
25.2.3 使用保存点 274
25.3 小结 275
第26章 管理安全性 276
26.1 了解访问控制 276
26.2 管理用户 278
26.2.1 创建用户账户 278
26.2.2 删除用户账户 279
26.2.3 设置访问权限 279
26.2.4 更改密码 282
26.3 小结 282
附录A 示例表 283
附录B Oracle PL/SQL数据
类型 289
附录C Oracle PL/SQL的
保留字和关键字 294
数据魔法师的炼金术:深入探索 Oracle PL/SQL 的奥秘 在浩瀚的数据库世界中,Oracle PL/SQL 犹如一位技艺精湛的炼金术士,将冰冷的数据转化为可观的价值,赋予其生命与智慧。本书并非简单的技术手册,而是一场深入的探索之旅,旨在揭示 PL/SQL 强大的潜能,引领读者掌握构建高效、健壮、可维护的 Oracle 数据库应用程序的核心技艺。我们将告别浅尝辄止的表面介绍,直抵 PL/SQL 的精髓,理解其背后的设计理念,并学会如何灵活运用其丰富的功能,解决现实世界中复杂的数据处理挑战。 一、 PL/SQL 的基石:理解与构建 我们的旅程始于对 PL/SQL 这一声明式与过程式相结合的编程语言的深刻理解。它不仅仅是 SQL 的过程化扩展,更是一种强大而灵活的工具,允许我们超越简单的查询,实现复杂的业务逻辑。 声明式与过程式的融合: 我们将深入剖析 PL/SQL 如何巧妙地融合 SQL 的强大数据操纵能力与过程式编程的控制结构。理解这种融合是掌握 PL/SQL 的第一步,它让我们知道为何 PL/SQL 在处理数据密集型任务时如此得心应手。 基本语法与结构: 从变量声明、数据类型选择,到条件语句(IF-THEN-ELSIF-ELSE)、循环结构(LOOP, WHILE LOOP, FOR LOOP),再到顺序语句块(BEGIN-END),我们将系统地梳理 PL/SQL 的基础构建模块。但这不仅仅是罗列语法,更重要的是理解每一种结构在实际应用中的最佳实践和适用场景。 块结构与异常处理: PL/SQL 的核心在于块结构,它可以是匿名块,也可以是命名的存储过程、函数、包或触发器。我们将详细讲解不同块结构的特点、生命周期以及它们之间的相互关系。更重要的是,我们将花费大量篇幅来深入探讨 PL/SQL 的异常处理机制。掌握如何优雅地捕捉、处理和抛出异常,是编写健壮、可靠应用程序的关键。我们将学习内置异常、用户自定义异常,以及使用 `EXCEPTION` 子句进行精细化控制,确保程序在面对意外情况时能够 gracefully fail 或自动恢复。 二、 数据的深度挖掘:游标与集合 数据是数据库的灵魂,而 PL/SQL 提供了强大的工具来高效地访问和处理这些数据。游标和集合是其中最核心的两个概念。 游标:驾驭数据流的艺术: SQL 语句一次返回一组行,而 PL/SQL 的游标则允许我们逐行处理查询结果。我们将不仅仅学习 `OPEN`, `FETCH`, `CLOSE` 这些基本操作,更会深入探讨显式游标和隐式游标的区别,理解它们的性能影响。我们还将学习如何利用游标的属性(如 `%ROWCOUNT`, `%FOUND`, `%NOTFOUND`)来控制数据流,以及如何使用参数化游标来提高代码的灵活性。更高级的技巧,如 FOR 循环迭代游标,以及在复杂查询中使用游标,都将得到详细的阐述。 集合:批量处理的利器: 传统的逐行处理效率往往低下。PL/SQL 的集合类型(VARRAY, Nested Tables, Associative Arrays)为我们提供了批量处理数据的能力。我们将系统地学习这三种集合类型的定义、操作方法,以及它们在不同场景下的应用。理解集合的存储方式、索引机制以及如何与 SQL 语句结合使用,将极大地提升我们处理大量数据的效率。例如,使用集合将数据批量加载到临时表中,或将数据库查询结果批量填充到内存中进行快速处理。 三、 模块化与复用:存储过程、函数与包 为了提高代码的可维护性、可读性和可重用性,PL/SQL 鼓励我们采用模块化的开发方式。存储过程、函数和包是实现这一目标的关键。 存储过程:执行特定任务的引擎: 存储过程是一组 PL/SQL 语句的集合,用于执行特定的数据库操作。我们将学习如何定义、调用、管理存储过程,以及如何使用 IN, OUT, IN OUT 参数来传递数据。我们将探讨存储过程在实现业务逻辑、数据校验、批处理等方面的应用,并分享编写高效存储过程的最佳实践。 函数:返回值的计算单元: 函数与存储过程类似,但其核心在于返回一个单一的值。我们将学习如何定义、调用和管理函数,并重点关注函数在计算、数据转换、条件判断等场景下的应用。理解函数和存储过程在返回值、副作用以及调用方式上的差异,能够帮助我们做出更明智的设计选择。 包:组织代码的殿堂: 包是 PL/SQL 中最强大的组织单元之一,它允许我们将相关的过程、函数、变量、常量、类型等封装在一起。我们将深入理解包的规范(PACKAGE SPECIFICATION)和包体(PACKAGE BODY)的区别,学习如何利用包来管理公共变量、共享常量,以及如何通过包来实现面向对象编程的思想。包的出现极大地提升了代码的模块化程度和可维护性,是构建大型、复杂 Oracle 应用程序的基石。 四、 触发器:让数据库响应事件 触发器是一种特殊的 PL/SQL 块,它会在某个数据库事件(如 INSERT, UPDATE, DELETE)发生时自动执行。 触发器的类型与作用: 我们将学习行级触发器和语句级触发器的区别,以及 BEFORE 和 AFTER 触发器的执行时机。我们将详细讲解触发器在实现数据完整性约束、审计跟踪、业务规则强制执行、数据同步等方面的强大功能。 触发器的设计与优化: 触发器的滥用可能导致性能问题,因此我们将重点探讨触发器的设计原则,如避免过度复杂的逻辑、减少不必要的数据库操作,以及如何使用 `RAISE_APPLICATION_ERROR` 来抛出自定义错误信息。 五、 高级主题与性能优化:精益求精 掌握了 PL/SQL 的基础和核心功能后,我们将进一步深入探索一些高级主题,并着重于性能优化。 动态 SQL:灵活应对变化的查询: 在某些情况下,SQL 语句的结构在编译时是未知的。动态 SQL(EXECUTE IMMEDIATE, DBMS_SQL)允许我们在运行时构建和执行 SQL 语句,从而实现更灵活的应用程序。我们将学习如何安全地使用动态 SQL,避免 SQL 注入等安全风险,并理解其适用的场景。 PL/SQL 集合与 SQL 的结合: 如何高效地在 PL/SQL 集合和 SQL 语句之间传递数据是性能优化的关键。我们将深入探讨 BULK COLLECT 和 FORALL 的使用,它们能够极大地减少 SQL 和 PL/SQL 之间的上下文切换,从而显著提升性能。 性能分析与调优: 编写高效的 PL/SQL 代码是每个开发者的追求。我们将介绍一些常用的性能分析工具和技术,如 `DBMS_PROFILER` 和 `SQL Trace`,帮助我们定位性能瓶颈。同时,我们将深入讲解影响 PL/SQL 性能的各种因素,如游标的使用、集合的应用、锁机制、内存管理等,并提供行之有效的调优策略。 自治事务:隔离与独立: 在某些场景下,我们需要执行一段独立的事务,不受外部事务的影响。自治事务允许我们创建独立的执行环境,并在其中提交或回滚操作,而不会影响主事务。我们将学习如何声明和使用自治事务,并理解其适用的场景。 UTL_FILE 库:文件 I/O 的桥梁: UTL_FILE 库为 PL/SQL 提供了与操作系统文件进行交互的能力,如读取、写入文本文件。我们将学习如何使用 UTL_FILE 来实现文件数据的导入导出、日志记录等功能,并关注其安全性和权限管理。 六、 实践出真知:案例分析与挑战 理论知识的学习固然重要,但真正的掌握来自于实践。本书将穿插大量的实际案例分析,涵盖从简单的业务逻辑实现到复杂的数据报表生成,从数据迁移到系统集成等各种场景。我们将通过分析真实世界的 PL/SQL 代码,学习如何应用所学的知识来解决实际问题。同时,我们也将设置一些具有挑战性的练习题,鼓励读者动手实践,巩固所学技能,并从中发现自己的不足。 结语 本书并非一本枯燥的技术文档,而是一场引人入胜的探险。我们相信,通过深入的讲解、丰富的案例和严谨的逻辑,您将能够摆脱对 PL/SQL 的片面认识,真正理解其强大的生命力,并将其灵活运用到您的 Oracle 数据库开发实践中,成为一名真正的数据魔法师。让我们一起揭开 Oracle PL/SQL 的神秘面纱,释放数据处理的无限潜能。
这本《Oracle PL/SQL必知必会》对我来说,更像是一次循序渐进的“修炼”。刚开始,我被书中的一些基础概念吸引住了。作者用非常生动形象的比喻,将那些枯燥的语法规则讲解得通俗易懂。比如,在解释PL/SQL块结构时,他将其类比为“盖房子”,有地基(声明部分)、主体结构(执行部分)以及最后的收尾工作(异常处理),这样的类比让我一下子就抓住了核心要点。更让我惊喜的是,书中对于变量、常量、数据类型这些基础知识的讲解,并非停留在表面,而是深入探讨了它们在不同场景下的适用性以及潜在的性能影响。例如,对于数值类型,书中详细分析了 NUMBER、INTEGER、BINARY_FLOAT 等的区别,以及它们在精度和速度上的权衡,这对于我优化查询性能非常有帮助。我还特别留意了书中关于条件语句和循环语句的讲解,作者并没有止步于 IF-THEN-ELSE 或 LOOP 的基本用法,而是通过一些小型但实用的示例,展示了如何构建更复杂的逻辑,如何嵌套使用循环,以及如何利用 EXIT、CONTINUE 等语句来精细控制程序的流程。这种由浅入深的讲解方式,让我感觉自己不是在死记硬背,而是在真正理解PL/SQL的“灵魂”。