第1章 初识Oracle 11g 1
1.1 关系型数据库简介 1
1.1.1 关系型数据库的产生 1
1.1.2 关系型数据库的特点 2
1.2 关系型数据库的范式 4
1.2.1 第一范式(1NF) 4
1.2.2 第二范式(2NF) 5
1.2.3 第三范式(3NF) 5
1.2.4 Boyce-Codd范式(BCNF) 5
1.3 关系型数据库管理系统 6
1.4 Oracle 11g服务器结构 6
1.4.1 数据库 7
1.4.2 表空间、数据文件 7
1.4.3 数据库实例 8
1.5 Oracle 11g新特性 8
1.5.1 数据库管理部分 9
1.5.2 PL/SQL部分 10
1.5.3 其他部分 11
1.6 Oracle 11g数据库实例 11
1.6.1 Oracle的安装 12
1.6.2 登录Oracle 11g 12
1.7 本书使用的数据库简介(仓储管理系统) 15
1.7.1 基础数据相关表 15
1.7.2 物料入库相关表 16
1.7.3 物料出库相关表 18
1.7.4 库存操作相关表 20
1.7.5 报表查询相关表 21
1.8 本章小结 23
第2章 初识PL/SQL 24
2.1 PL/SQL简介 24
2.1.1 SQL发展历史 24
2.1.2 SQL语言的优点 24
2.1.3 PL/SQL与ANSI-SQL的关系 25
2.1.4 PL/SQL的优缺点 26
2.2 学习 PL/SQL前的准备 27
2.3 PL/SQL基本句法 28
2.3.1 大小写 28
2.3.2 分隔符 28
2.3.3 引用字符串 29
2.3.4 括号 29
2.4 PL/SQL数据类型 30
2.4.1 标量类型 30
2.4.2 复合类型 34
2.4.3 引用类型 38
2.4.4 LOB类型 38
2.5 PL/SQL基本结构 39
2.6 常量和变量 39
2.6.1 常量 40
2.6.2 变量 40
2.7 表达式和运算符 41
2.7.1 数值表达式 41
2.7.2 字符表达式 41
2.7.3 关系表达式 42
2.7.4 逻辑表达式 42
2.7.5 集合运算符 42
2.7.6 行运算符 43
2.8 流程控制 43
2.8.1 IF…THEN语句 44
2.8.2 IF…THEN…ELSE语句 44
2.8.3 IF…THEN…ELSIF语句 45
2.8.4 CASE语句 45
2.8.5 搜寻式CASE语句 47
2.8.6 LOOP语句 48
2.8.7 WHILE…LOOP语句 50
2.8.8 FOR…LOOP语句 50
2.8.9 GOTO语句 54
2.8.10 NULL语句 56
2.9 PL/SQL常用语句简介 57
2.9.1 DDL数据定义语句 57
2.9.2 DQL数据查询语句 59
2.9.3 DML数据操作语句 60
2.9.4 DCL数据控制语句 61
2.9.5 TCL事务控制语句 62
2.10 PL/SQL功能特性简介 63
2.10.1 游标 63
2.10.2 过程和函数 64
2.10.3 包 66
2.10.4 集合 66
2.10.5 错误处理 67
2.10.6 Oracle 11g中的新特性 72
2.11 本章小结 74
第3章 PL/SQL常用开发工具 75
3.1 SQL*Plus 75
3.1.1 连接Oracle数据库 75
3.1.2 配置SQL*Plus 76
3.1.3 使用SQL*Plus 79
3.1.4 SQL*Plus常用命令 81
3.2 SQL Developer 84
3.2.1 SQL Developer简介 85
3.2.2 连接Oracle数据库 86
3.3 使用SQL Developer 88
3.3.1 运行SQL语句 88
3.3.2 管理表 89
3.3.3 管理序列 90
3.3.4 管理索引 91
3.3.5 管理视图 91
3.3.6 管理触发器 92
3.3.7 管理过程、函数和包 94
3.4 本章小结 95
第4章 数据表的基本操作 96
4.1 数据表基本操作 96
4.2 创建数据表 96
4.3 修改数据表 97
4.3.1 增加列 97
4.3.2 修改列 98
4.3.3 删除数据列 98
4.3.4 更改表名 99
4.4 删除数据表 99
4.5 表的可视化操作 100
4.5.1 创建表 100
4.5.2 编辑表 101
4.5.3 删除表 102
4.6 约束 102
4.6.1 非空约束 103
4.6.2 唯一约束 103
4.6.3 主键约束 105
4.6.4 外键约束 105
4.6.5 条件约束 106
4.6.6 约束的维护 107
4.6.7 指定列默认值 107
4.7 序列的操作 108
4.7.1 创建序列 108
4.7.2 使用序列 109
4.7.3 修改序列 111
4.7.4 删除序列 112
4.8 序列的可视化操作 113
4.8.1 创建序列 114
4.8.2 编辑序列 115
4.8.3 删除序列 115
4.9 索引的种类 116
4.9.1 B-Tree索引(B-Tree Index) 116
4.9.2 基于函数的索引(Function Based Index) 116
4.9.3 反转键索引(Reverse Key Index) 117
4.9.4 位图索引(Bitmap Index) 117
4.9.5 位图连接索引(Bitmap Join Index) 117
4.9.6 压缩索引(Compress Index) 118
4.9.7 降序索引(Descending Index) 118
4.9.8 分区索引(Partitioned Index) 118
4.9.9 索引组织表(Index Organized Table,IOT) 118
4.9.10 簇索引(Cluster Index) 118
4.9.11 域索引(Domain Index) 118
4.9.12 隐藏索引(Invisible Index) 119
4.9.13 虚拟索引(Virtual Index) 119
4.9.14 其他的索引类型 119
4.10 创建索引 119
4.11 使用索引 120
4.12 管理索引 122
4.13 索引的可视化操作 123
4.13.1 创建索引 123
4.13.2 编辑索引 124
4.13.3 删除索引 125
4.14 元数据管理 125
4.14.1 查询数据表信息 125
4.14.2 查询列信息 127
4.14.3 查询约束信息 127
4.14.4 查询序列信息 128
4.14.5 查询索引信息 129
4.15 本章小结 130
第5章 数据的增、删、改 131
5.1 增加数据 131
5.1.1 指定列名的插入 131
5.1.2 省略列名的插入 132
5.1.3 完整性约束问题 133
5.1.4 特殊的插入语句 133
5.2 修改数据 135
5.2.1 简单更新语句 135
5.2.2 使用子查询更新 135
5.2.3 使用MERGE更新 137
5.3 删除数据 139
5.3.1 删除特定行 139
5.3.2 删除所有行 140
5.3.3 删除重复行 140
5.3.4 使用TRUNCATE截断表 143
5.4 本章小结 144
第6章 数据的基本查询 145
6.1 简单查询 146
6.1.1 SELECT语句 146
6.1.2 WHERE子句 147
6.1.3 关键字的使用 148
6.1.4 使用值表达式 149
6.1.5 排序查询结果 150
6.2 常用内置函数 151
6.2.1 数值操作函数 151
6.2.2 字符串操作函数 153
6.2.3 日期时间操作函数 155
6.2.4 转换操作函数 157
6.2.5 辅助函数 160
6.3 分组和聚合查询结果 161
6.3.1 用GROUP BY子句分组 161
6.3.2 使用聚合函数 162
6.3.3 用HAVING子句过滤组 163
6.4 谓词查询 164
6.4.1 范围查询 164
6.4.2 空值判断 165
6.4.3 模糊查询 166
6.4.4 IN谓词 167
6.4.5 EXISTS谓词 167
6.4.6 定量谓词 168
6.5 本章小结 170
第7章 数据的复杂查询 171
7.1 子查询 171
7.1.1 标量子查询 171
7.1.2 比较子查询 173
7.1.3 相关子查询 174
7.1.4 嵌套子查询 175
7.2 用子查询操作数据 176
7.2.1 用子查询增加数据 176
7.2.2 用子查询修改数据 177
7.2.3 用子查询删除数据 178
7.3 集合操作 178
7.3.1 并集运算 179
7.3.2 交集运算 180
7.3.3 差集运算 181
7.4 多表连接 182
7.4.1 基本连接 183
7.4.2 交叉连接 184
7.4.3 自连接 185
7.4.4 自然连接 186
7.5 条件连接(多表连接) 187
7.5.1 内连接 187
7.5.2 外连接 188
7.6 层次化查询 191
7.6.1 层次化数据 191
7.6.2 递归查询 192
7.6.3 数据的层次 194
7.6.4 使用子查询 195
7.6.5 自下而上遍历树 196
7.6.6 节点和分支的裁剪 197
7.7 本章小结 198
第8章 视图 199
8.1 视图简介 199
8.1.1 视图的优点 199
8.1.2 使用视图的注意事项 201
8.2 创建视图 201
8.2.1 单表视图 201
8.2.2 多表视图 203
8.2.3 可更新视图 204
8.2.4 内联视图 206
8.2.5 嵌套视图 209
8.3 使用视图 209
8.3.1 插入数据 209
8.3.2 修改数据 210
8.3.3 删除数据 210
8.3.4 删除视图 211
8.4 视图的可视化操作 211
8.4.1 创建视图 211
8.4.2 编辑视图 212
8.4.3 删除视图 213
8.5 本章小结 214
第9章 触发器 215
9.1 触发器的作用 215
9.2 Oracle触发器种类 216
9.2.1 DML触发器 216
9.2.2 替代触发器 216
9.2.3 事件触发器 217
9.3 DML触发器 217
9.3.1 基本语法 217
9.3.2 行级触发器 219
9.3.3 限定条件的行级触发器 221
9.3.4 级联修改触发器 224
9.3.5 语句级触发器 226
9.3.6 利用触发器进行数据同步 227
9.4 替代触发器 228
9.5 事件触发器 229
9.5.1 基本语法 229
9.5.2 数据库事件触发器 230
9.5.3 DDL事件触发器 232
9.5.4 事件属性函数 232
9.6 管理触发器 234
9.6.1 查看触发器 234
9.6.2 禁用/启用触发器 235
9.6.3 删除触发器 235
9.7 触发器的可视化操作 236
9.7.1 创建触发器 236
9.7.2 编辑触发器 237
9.7.3 删除触发器 238
9.8 本章小结 238
第10章 游标 239
10.1 游标简介 239
10.2 声明游标 239
10.3 打开/关闭游标 240
10.3.1 打开游标 240
10.3.2 传递游标参数 241
10.3.3 从游标中取值 241
10.3.4 批量取得游标中的数据 243
10.3.5 关闭游标 243
10.3.6 一个完整的示例 243
10.4 在游标中使用子查询 244
10.5 游标属性 244
10.5.1 %FOUND属性 245
10.5.2 %ISOPEN属性 245
10.5.3 %NOTFOUND属性 245
10.5.4 %ROWCOUNT属性 246
10.6 用游标进行循环 247
10.6.1 使用子查询代替显式游标 247
10.6.2 在游标FOR循环中为表达式定义别名 248
10.6.3 为游标FOR循环传递参数 248
10.7 游标变量 249
10.7.1 游标变量简介 249
10.7.2 游标变量的定义和声明 249
10.8 控制游标变量 251
10.8.1 打开游标变量 251
10.8.2 从游标变量中取值 253
10.8.3 关闭游标变量 254
10.9 使用游标变量作为主变量 254
10.10 游标变量的限制 256
10.11 游标表达式 256
10.12 本章小结 258
第11章 数据库事务 259
11.1 事务简介 259
11.2 操作事务 259
11.3 设置事务属性 260
11.3.1 访问级别 260
11.3.2 隔离级别 262
11.4 提交事务 263
11.5 回滚事务 264
11.5.1 设置事务保存点 265
11.5.2 回滚事务事例 266
11.5.3 终止事务 267
11.6 与SQL Server事务的区别 267
11.6.1 事务设置及类型的区别 267
11.6.2 事务隔离级别 268
11.6.3 DDL语句对事务的影响 269
11.6.4 用户断开数据库连接对事务的影响 269
11.7 锁 270
11.7.1 使用FOR UPDATE 270
11.7.2 使用LOCK TABLE 271
11.7.3 提交后的数据取得 271
11.8 时间戳 272
11.9 事务日志 275
11.10 本章小结 276
第12章 集合 277
12.1 联合数组 277
12.1.1 创建联合数组 277
12.1.2 填充联合数组 278
12.1.3 调用联合数组 278
12.2 嵌套表 279
12.2.1 创建嵌套表 280
12.2.2 重新指定元素 280
12.2.3 元素序列 281
12.2.4 非空约束 282
12.2.5 在表列中使用嵌套表 283
12.3 变长数组 284
12.3.1 创建变长数组 285
12.3.2 在表列中使用变长数组 286
12.4 操作集合 287
12.4.1 查询集合信息 287
12.4.2 集合类型转换 288
12.5 集合的属性 289
12.5.1 COUNT属性 290
12.5.2 EXISTS属性 290
12.5.3 FIRST和LAST属性 291
12.5.4 LIMIT属性 291
12.5.5 NEXT和PRIOR属性 291
12.6 集合方法 292
12.6.1 DELETE方法 292
12.6.2 EXTEND方法 293
12.6.3 TRIM方法 294
12.7 集合操作符 294
12.7.1 SET操作符 295
12.7.2 MULTISET UNION操作符 296
12.7.3 MULTISET UNION DISTINCT操作符 297
12.7.4 MULTISET INTERSECT操作符 297
12.7.5 MULTISET EXCEPT操作符 298
12.8 多级集合 299
12.9 本章小结 302
第13章 过程、函数和包 303
13.1 过程 303
13.1.1 创建过程的语法 303
13.1.2 与SQL Server存储过程的区别 305
13.2 创建过程 306
13.2.1 创建不带任何参数的过程 306
13.2.2 创建带有IN参数的过程 307
13.2.3 创建带有OUT参数的过程 309
13.2.4 创建带有IN OUT参数的过程 311
13.2.5 参数传递方式 312
13.2.6 与SQL Server存储过程的对比 314
13.3 管理过程 318
13.3.1 查询已创建的过程 318
13.3.2 查看过程源码 319
13.3.3 使用NOCOPY编译提示传递大型数据结构 319
13.3.4 重编译过程 321
13.3.5 删除过程 322
13.4 函数 322
13.4.1 创建函数的语法 323
13.4.2 与SQLServer函数的区别 323
13.5 创建函数 324
13.5.1 创建不带任何参数的函数 324
13.5.2 创建带有IN参数的函数 325
13.5.3 创建带有OUT参数的函数 326
13.5.4 创建带有IN OUT参数的函数 327
13.5.5 参数传递方式 328
13.5.6 函数调用限制 329
13.5.7 与SQL Server函数的对比 329
13.6 管理函数 331
13.6.1 查询已创建的函数 331
13.6.2 查看函数源码 331
13.6.3 重编译函数 332
13.6.4 删除函数 332
13.7 包 332
13.7.1 创建包的语法 332
13.7.2 包的优点 333
13.8 创建包 334
13.8.1 包规范 334
13.8.2 包体 335
13.8.3 调用包组件 337
13.9 管理包 337
13.9.1 查询已创建的包 338
13.9.2 查看包源码 338
13.9.3 重编译包 338
13.9.4 删除包 339
13.10 系统内置包 339
13.11 本章小结 343
第14章 安全管理 344
14.1 安全性与访问控制 344
14.1.1 访问控制与其他安全措施之间的关系 344
14.1.2 访问控制的三要素 345
14.1.3 访问控制矩阵与授权关系表 345
14.1.4 自主访问控制模型 346
14.1.5 强制访问控制模型 347
14.1.6 基于角色的访问控制模型 348
14.2 用户管理 349
14.2.1 身份认证方式 349
14.2.2 创建用户 350
14.2.3 修改用户 352
14.2.4 用户元数据 353
14.2.5 删除用户 354
14.2.6 可视化操作用户 354
14.3 权限管理 356
14.3.1 权限简介 357
14.3.2 授予/撤销系统权限 358
14.3.3 授予/撤销对象权限 360
14.4 角色管理 364
14.4.1 预置系统角色 365
14.4.2 创建角色 366
14.4.3 授权/撤销角色 367
14.4.4 删除角色 369
14.4.5 角色与权限的元数据 370
14.4.6 可视化操作角色 370
14.5 审计 372
14.5.1 审计简介 373
14.5.2 审计分类 373
14.5.3 启用审计 374
14.5.4 执行审计 374
14.5.5 查询审计信息 377
14.6 本章小结 377
第15章 PL/SQL性能优化 378
15.1 查询操作优化 378
15.1.1 使用CASE表达式替代多个查询 378
15.1.2 避免使用“*” 379
15.1.3 查询表顺序的影响 379
15.1.4 使用表的别名(Alias) 379
15.1.5 用WHERE子句替换HAVING子句 380
15.1.6 减少对表的查询 381
15.1.7 WHERE后面的条件顺序影响 381
15.1.8 IN操作符 382
15.1.9 NOT IN操作符 382
15.1.10 〈〉或!=操作符(不等于) 382
15.1.11 IS NULL或IS NOT NULL操作(判断字段是否为空) 382
15.1.12 〉和〈操作符(大于和小于操作符) 383
15.1.13 LIKE操作符 383
15.1.14 UNION操作符 383
15.1.15 用表连接替换EXISTS 384
15.1.16 使用DECODE函数 384
15.1.17 整合无关联的数据库访问 385
15.2 其他操作优化 386
15.2.1 删除重复记录 386
15.2.2 用TRUNCATE替代DELETE 386
15.2.3 尽量多使用COMMIT 387
15.3 使用绑定变量 387
15.4 利用索引 388
15.4.1 使用索引的基本原则 388
15.4.2 监视索引使用情况 390
15.4.3 不能利用索引的情况 390
15.5 SQL性能分析工具 391
15.5.1 执行计划 392
15.5.2 SQL性能分析器 392
15.5.3 数据库重放和SQL重演 393
15.5.4 SQL调优顾问 393
15.6 本章小结 394