第1篇 PL/SQL简介 2
第1章 走进Oracle 2
1.1 数据库系统与数据模型 2
1.1.1 基本术语 2
1.1.2 数据库技术的发展 3
1.1.3 数据模型 5
1.2 数据库系统的体系结构 6
1.2.1 数据库系统的三级模式 6
1.2.2 数据库管理系统 7
1.2.3 数据库系统的工作流程 8
1.3 关系数据库的简单介绍 9
1.3.1 关系数据库的基本特性 10
1.3.2 关系数据库的设计规范 10
1.4 认识Oracle 11g R2 11
1.4.1 什么是Oracle 11g R2 11
1.4.2 Oracle的发展历程 12
1.4.3 Oracle 11g R2的新特性 13
1.5 小结 13
第2章 认识PL/SQL 14
2.1 SQL语言概述 14
2.1.1 SQL语言的发展 14
2.1.2 SQL语言的功能 14
2.1.3 SQL语言的执行方式 15
2.1.4 SQL语句结构 16
2.1.5 SQL环境 17
2.1.6 SQL DBMS的客户/服务器模型 18
2.2 什么是PL/SQL 19
2.2.1 认识PL/SQL 19
2.2.2 PL/SQL结构 21
2.2.3 PL/SQL的主要组成部分 24
2.2.4 PL/SQL基本规范 25
2.3 PL/SQL在SQL*Plus中的使用 26
2.3.1 启动SQL*Plus 27
2.3.2 SQL*Plus追加文本命令 28
2.3.3 SQL*Plus增加文本命令 29
2.3.4 SQL*Plus替换文本命令 30
2.3.5 SQL*Plus删除命令 31
2.3.6 SQL*Plus清除缓冲区命令 32
2.3.7 SQL*Plus显示缓冲区内容命令 33
2.3.8 SQL*Plus保存命令 34
2.3.9 查询结果的格式化 36
2.3.10 注释的使用 43
2.3.11 在SQL*Plus中编辑语句 44
2.4 PL/SQL在SQL Developer中的使用 45
2.4.1 启动SQL Developer 45
2.4.2 SQL Developer的布局 46
2.4.3 在SQLDeveloper中编写语句 46
2.5 小结 47
第2篇 PL/SQL基础 50
第3章 数据表的基本操作 50
3.1 创建表 50
3.1.1 创建表的语法 50
3.1.2 常用的数据类型 51
3.1.3 创建表实例 52
3.2 约束 54
3.2.1 约束的类型 55
3.2.2 创建一个带检查约束的表 55
3.2.3 创建一个带非空约束的表 56
3.2.4 创建一个带唯一约束的表 57
3.2.5 创建一个带外键约束的表 58
3.2.6 创建一个含多个约束的表 61
3.3 修改表 62
3.3.1 修改表的结构 62
3.3.2 给表添加约束 65
3.3.3 删除表中的约束 66
3.4 删除表 67
3.5 重命名表 67
3.6 使用企业管理器操作表 67
3.6.1 启用企业管理器 68
3.6.2 使用企业管理器创建表 69
3.6.3 使用企业管理器修改表 71
3.6.4 使用企业管理器删除表 74
3.7 小结 75
第4章 表中数据的基本操作 76
4.1 查询数据表 76
4.1.1 查询表中的数据 76
4.1.2 使用SQLDeveloper工具查询表中的数据 77
4.2 添加数据 79
4.2.1 添加操作的基本语法 79
4.2.2 直接向表中添加数据 80
4.2.3 数据中NULL值的处理 82
4.2.4 插入值是默认值的处理 84
4.2.5 插入值是唯一值的处理 85
4.2.6 使用INSERT...SELECT插入数据 86
4.2.7 使用SQL Developer工具添加数据 87
4.3 修改数据 88
4.3.1 修改操作的基本语法 88
4.3.2 使用UPDATE语句更新数据行 89
4.3.3 根据条件修改表中的数据 91
4.3.4 使用SQL Developer工具修改数据 91
4.4 删除数据 91
4.4.1 删除操作的基本语法 91
4.4.2 删除表中的数据 92
4.4.3 有关TRUNCATE的使用 92
4.4.4 使用SQLDeveloper工具删除数据 94
4.5 小结 94
第5章 数据的基本查询 95
5.1 查询语句的基础 95
5.1.1 查询语句语法 95
5.1.2 查询各关键词的顺序及功能 96
5.1.3 查询语句执行顺序 96
5.2 最容易理解的查询 97
5.2.1 增加实验数据 97
5.2.2 查询表中列的数据 99
5.2.3 查询所有列 101
5.2.4 去除查询结果中的重复记录 102
5.2.5 返回查询的部分数据 104
5.3 带条件的查询 104
5.3.1 单一的条件查询 105
5.3.2 查询中使用比较表达式 106
5.3.3 使用简单逻辑表达式 108
5.3.4 有关NULL值的判断 114
5.3.5 有关模糊查询 115
5.3.6 指定数据范围 120
5.3.7 如何限制检索数据范围 122
5.3.8 定义转义符 123
5.4 排序查询结果 125
5.4.1 基本排序 125
5.4.2 多列排序 129
5.5 PL/SQL中的运算符 131
5.5.1 算术运算符 132
5.5.2 比较运算符 132
5.5.3 逻辑运算符 132
5.5.4 字符串连接符 133
5.5.5 赋值运算符 133
5.5.6 运算符的优先级 133
5.6 查询中表达式的使用 134
5.6.1 使用连接符连接列 134
5.6.2 算术表达式的使用 136
5.7 小结 137
第6章 查询中函数的使用 138
6.1 常用的单行函数 138
6.1.1 字符处理函数 138
6.1.2 数值处理函数 143
6.1.3 日期处理函数 146
6.1.4 转换函数 149
6.1.5 替换NULL值函数 151
6.1.6 排除指定条件函数 152
6.2 聚合函数 152
6.2.1 聚合函数的种类 152
6.2.2 计数函数 153
6.2.3 求和函数 155
6.2.4 均值函数 156
6.2.5 最大值/最小值函数 158
6.2.6 统计函数 160
6.2.7 聚合函数的重值处理 161
6.3 分组查询 162
6.3.1 简单分组 162
6.3.2 多列分组 163
6.3.3 分组查询中NULL值的处理 164
6.3.4 汇总数据运算符 165
6.3.5 筛选分组结果 168
6.4 其他函数 170
6.4.1 返回登录名函数 170
6.4.2 返回SESSIONID和LANGUAGE函数 170
6.4.3 数据匹配函数 171
6.5 小结 172
第7章 查询中特殊的转换函数 173
7.1 基本的转换函数 173
7.1.1 数据类型的自动转换 173
7.1.2 关于自动转换的注意事项 176
7.2 特殊的转换函数 177
7.3 变换函数 178
7.3.1 TRANSLATE函数 178
7.3.2 DECODE函数 180
7.4 小结 182
第8章 数据表的高级查询 183
8.1 理解什么是多表连接 183
8.1.1 什么是连接 183
8.1.2 连接的类型与实现 184
8.2 简单的多表查询 184
8.2.1 创建实例表 185
8.2.2 如何实现多表查询 186
8.2.3 指定连接条件 187
8.2.4 使用别名作为表名的简写 188
8.2.5 自连接表进行查询 189
8.3 表的连接查询 192
8.3.1 基本连接语法 193
8.3.2 内部连接 193
8.3.3 自然连接 196
8.3.4 外部连接 198
8.3.5 交叉连接 203
8.3.6 连接中空值问题 204
8.3.7 表的连接与聚合分析 206
8.4 集合运算 208
8.4.1 集合运算的种类 208
8.4.2 UNION的使用 208
8.4.3 有关多表的UNION操作 211
8.4.4 UNION与JOIN的区别 212
8.4.5 MINUS与INTERSECT的使用 213
8.5 子查询的使用 217
8.5.1 认识子查询 217
8.5.2 非相关子查询与相关子查询 217
8.5.3 子查询的组成 219
8.5.4 子查询的使用方式及限制 220
8.6 在子查询中使用各种限制条件 220
8.6.1 比较运算符引入子查询 221
8.6.2 子查询中的聚合函数 223
8.6.3 在子查询中使用IN 224
8.7 在子查询中使用EXISTS 227
8.7.1 使用EXISTS的子查询 228
8.7.2 EXISTS子查询的使用 229
8.7.3 使用EXISTS子查询检查表中的重复行 230
8.8 子查询的其他应用 231
8.8.1 在子查询中使用ROWNUM关键词 231
8.8.2 在SELECT子句中使用子查询 234
8.8.3 在HAVING子句中使用子查询 235
8.8.4 在数据操纵语言(DML)中使用子查询 236
8.9 小结 238
第3篇 PL/SQL高级技术 240
第9章 索引和视图的使用 240
9.1 索引及其操作 240
9.1.1 什么是索引 240
9.1.2 索引的种类及语法 240
9.1.3 索引的创建 241
9.1.4 创建索引的注意事项 246
9.1.5 索引的管理 246
9.2 视图及其应用 250
9.2.1 什么是视图 250
9.2.2 视图的作用 251
9.3 创建视图 251
9.3.1 视图的语法 251
9.3.2 创建单表视图 252
9.3.3 创建多表视图 253
9.3.4 视图的视图 254
9.3.5 无源表视图 255
9.3.6 设置视图只读 255
9.3.7 设置视图的检查约束 257
9.3.8 内嵌视图的使用 259
9.3.9 查询视图的定义和相关信息 259
9.4 修改、删除视图 260
9.4.1 修改视图内容 260
9.4.2 删除视图 261
9.5 小结 262
第10章 序列 263
10.1 创建序列 263
10.2 使用序列 265
10.3 序列属性 269
10.3.1 创建序列的注意事项 269
10.3.2 指定序列的初始值 269
10.3.3 序列的最大值和最小值 270
10.3.4 序列的步长 271
10.3.5 序列的循环取值 272
10.3.6 序列的缓存大小 273
10.4 小结 274
第11章 数据类型、流程控制和游标 275
11.1 PL/SQL数据类型 275
11.1.1 标量类型 275
11.1.2 复合类型 276
11.2 变量和常量 284
11.2.1 变量的声明语法 284
11.2.2 常量的声明语法 285
11.3 程序流控制语句 285
11.3.1 IF...ELSE条件选择结构 286
11.3.2 CASE条件控制语句 291
11.3.3 LOOP循环控制语句 295
11.4 游标 300
11.4.1 游标的概念 301
11.4.2 显式游标的定义和操作 302
11.4.3 显式游标的属性 306
11.4.4 隐式游标 308
11.5 小结 311
第12章 存储过程、函数 312
12.1 理解存储过程 312
12.1.1 认识存储过程 312
12.1.2 存储过程的优点 312
12.1.3 存储过程的语法 313
12.2 存储过程的创建和执行 313
12.2.1 存储过程的执行 313
12.2.2 创建无参数的存储过程 314
12.2.3 带有输入参数的存储过程 318
12.2.4 带有输出参数的存储过程 321
12.3 存储过程的管理 323
12.3.1 查看存储过程 323
12.3.2 查看存储过程的错误 324
12.3.3 修改存储过程 326
12.3.4 存储过程的重新编译 326
12.3.5 删除存储过程 327
12.4 函数 327
12.4.1 函数的组成和语法 327
12.4.2 创建无参数函数 328
12.4.3 创建有参数函数 330
12.4.4 查看函数 335
12.4.5 修改函数 336
12.4.6 重新编译函数 337
12.4.7 删除函数 338
12.5 小结 338
第13章 程序包 339
13.1 程序包简介 339
13.2 构建程序包的规则 339
13.2.1 程序包规范 339
13.2.2 程序包主体 341
13.3 调用程序包中的函数/存储过程 343
13.4 删除程序包 343
13.5 小结 344
第14章 触发器 345
14.1 触发器的基本概念 345
14.1.1 触发器简介 345
14.1.2 触发器的类型 345
14.1.3 触发器的作用及使用 346
14.1.4 触发器的执行环境 346
14.2 触发器的创建和使用 347
14.2.1 触发器的语法和组成 347
14.2.2 创建DML触发器 349
14.2.3 替代类型触发器 360
14.2.4 复合类型触发器 362
14.2.5 DDL类型触发器 364
14.3 触发器管理 366
14.3.1 查看触发器 366
14.3.2 修改触发器 367
14.3.3 删除触发器 369
14.4 小结 370
第15章 异常处理 371
15.1 理解异常 371
15.1.1 异常的分类 371
15.1.2 异常的结构 372
15.2 异常的应用 372
15.2.1 预定义异常 373
15.2.2 非预定义异常 377
15.2.3 自定义异常 379
15.3 小结 380
第16章 事务和锁 381
16.1 事务控制的基本概念 381
16.1.1 事务控制的必要性 381
16.1.2 事务的ACID特性及实现 382
16.1.3 事务的状态 382
16.1.4 PL/SQL中事务的执行 383
16.2 PL/SQL中事务的实现 384
16.2.1 事务的类型 384
16.2.2 提交事务 385
16.2.3 设置事务的保存点 387
16.3 并发控制及其实现 388
16.3.1 并发访问的常见问题 389
16.3.2 什么是锁 390
16.3.3 锁的分类 390
16.3.4 事务隔离级别 392
16.3.5 事务阻塞及其解决方法 394
16.3.6 死锁 396
16.4 小结 398
第17章 安全管理 399
17.1 用户管理 399
17.1.1 什么是用户 399
17.1.2 创建用户 399
17.1.3 修改用户 405
17.1.4 删除用户 407
17.2 权限管理 409
17.2.1 授予权限 409
17.2.2 权限回收 413
17.2.3 查看权限 415
17.3 角色管理 416
17.3.1 理解角色 416
17.3.2 创建角色 417
17.3.3 角色的管理设置 419
17.3.4 修改、删除角色 420
17.4 概要文件(PROFILE) 421
17.4.1 理解概要文件 421
17.4.2 创建概要文件 421
17.4.3 修改、删除概要文件 424
17.4.4 查询概要文件 425
17.5 小结 426
第18章 动态SQL和动态PL/SQL 427
18.1 动态SQL 427
18.1.1 EXECUTEIMMEDIATE语句 427
18.1.2 OPENFOR语句 428
18.1.3 4种动态SQL方法 429
18.2 动态PL/SQL 431
18.3 小结 431
第19章 管理PL/SQL代码 432
19.1 管理数据库中的代码 432
19.1.1 数据字典视图概述 432
19.1.2 显示存储对象的信息 433
19.1.3 源代码的显示和搜索 434
19.1.4 通过数据字典视图查看编译器属性 434
19.1.5 通过视图分析和更改触发器的状态 436
19.1.6 分析参数信息 437
19.2 依赖关系的管理和代码的重编译 437
19.2.1 通过数据字典视图查看依赖关系 437
19.2.2 失效的程序单元的重编译 438
19.3 编译时警告 439
19.4 PL/SQL程序的执行和调试 441
19.4.1 PL/SQL程序的执行 441
19.4.2 PL/SQL程序的调试 442
19.4.3 调试技巧和策略 442
19.5 I/O操作与PL/SQL 446
19.5.1 显示信息 446
19.5.2 启用DBMS OUTPUT 446
19.6 应用安全与PL/SQL 448
19.7 小结 449
第20章 PL/SQL语句优化 450
20.1 一般的SQL技巧 450
20.1.1 在查询中尽量不使用“*” 450
20.1.2 多表查询时多使用别名 450
20.1.3 条件查询多使用WHERE 451
20.1.4 计算时不用索引列 451
20.1.5 指定查询范围时多使用IN 452
20.1.6 使用TRUNCATE清空表中记录 453
20.1.7 及时提交事务 453
20.1.8 DECODE函数的使用 454
20.1.9 多使用EXISTS语句判断条件 455
20.1.10 其他技巧 455
20.2 Oracle优化器 456
20.2.1 Oracle优化器的分类 456
20.2.2 Oracle优化器的模式 457
20.2.3 查看Oracle执行计划 457
20.3 SQL性能指导 458
20 3.1 ADDM 458
20.3.2 SQL访问指导 458
20.3.3 SQL优化指导 462
20.4 小结 462
第21章 备份与恢复 463
21.1 备份与恢复简介 463
21.1.1 备份 463
21.1.2 恢复 463
21.2 逻辑备份与恢复 463
21.2.1 使用expdp和impdp工具进行逻辑备份与恢复 463
21.2.2 使用OEM进行逻辑备份与恢复 466
21.3 脱机备份与恢复 475
21.3.1 脱机备份 475
21.3.2 脱机恢复 476
21.4 联机备份与恢复 476
21.4.1 使用RMAN管理备份与恢复 477
21.4.2 恢复 479
21.5 小结 482
第4篇 Oracle应用开发 484
第22章 在.NET中连接Oracle数据库 484
22.1 ADO.NET概述 484
22.1.1 什么是ADO.NET 484
22.1.2 ADO.NET中的对象 484
22.2 使用绑定的方式连接Oracle数据库 485
22.2.1 数据控件概述 485
22.2.2 使用DataGridView控件绑定Oracle数据库 486
22.3 使用代码的方式连接Oracle数据库 492
22.3.1 使用Command对象操作 Oracle数据库 492
22.3.2 使用DataSet对象存储查询结果 494
22.3.3 商品信息存储实例 495
22.4 小结 499
第23章 在Java中连接Oracle数据库 500
23.1 JDBC与ODBC简介 500
23.1.1 什么是JDBC 500
23.1.2 什么是ODBC 501
23.2 使用Thin方式连接Oracle数据库 502
23.3 使用JDBC-ODBC桥连接Oracle数据库 510
23.3.1 配置ODBC数据源 510
23.3.2 连接Oracle数据库 513
23.4 小结 513