第1部分 Oracle开发前奏 2
第1章 数据库系统概述 2
1.1 数据库的产生动机 3
1.2 数据、数据库、数据库管理系统、数据库系统 4
1.3 数据管理与数据库系统的特点 6
1.4 数据模型 8
1.4.1 两类数据模型 8
1.4.2 概念模型 10
1.4.3 数据模型 14
1.4.4 关系模型基础 19
1.5 SQL概述 21
提示:关于NOSQL技术 22
1.6 本章小结 22
第2章 Oracle的安装与基本使用 23
2.1 Oracle简介 24
2.2 安装Oracle数据库 25
提示:关于CDB与PDB 29
注意:如果不进行口令配置,有可能某些用户为锁定状态 32
2.3 Oracle体系结构 33
提示:Oracle服务器、Oracle实例(instance)、Oracle数据库(database)的关系 34
2.3.1 Oracle实例体系 34
2.3.2 Oracle物理体系 38
2.4 Oracle监听服务 38
2.4.1 注册表被破坏导致监听无法启动 39
2.4.2 计算机名称修改导致监听无法启动 39
2.4.3 监听工具LSNRCTL 40
2.5 SQLPlus简介 41
2.6 SQLPlus常用命令 42
提示:关于sqlplus.exe工具的补充说明 42
提示:sqlplusw.exe的输入形式 44
提示:需要设置命令行格式 45
2.7 配置SQL Developer 48
2.8 c##scott用户表 51
2.8.1 部门表dept 51
2.8.2 雇员表emp 52
2.8.3 工资等级表salgrade 52
2.8.4 工资补贴表bonus 53
2.9 本章小结 53
第2部分 SQL基础语法 56
第3章 简单查询 56
3.1 简单查询语句 57
提示:关于null的问题 57
提示:关于SQL中的投影概念 59
3.2 其他简单查询 60
3.3 本章小结 65
第4章 限定查询与排序显示 66
4.1 限定查询 67
4.1.1 认识限定查询 67
提示:一般在执行查询之前都先查看一下表中的记录数 67
4.1.2 对数据进行限定查询 70
提示:阅读查询语句的小技巧 71
注意:在使用NOT IN操作符时列表不能有NULL 78
4.2 对结果排序:ORDER BY 82
提示:语句执行顺序 82
4.3 本章小结 84
第5章 单行函数 85
5.1 单行函数简介 86
5.2 字符函数 87
5.3 数值函数 92
5.4 日期函数 94
提示:关于日期和数字的问题 95
5.5 转换函数 101
注意:建议保留前导0 102
提示:关于数据的隐式转换操作 103
5.6 通用函数 106
5.7 本章小结 112
第6章 多表查询 113
6.1 多表查询的基本语法 114
提示:关于笛卡尔积的代数表示 115
提示:关于笛卡尔积的消除 117
6.2 多表查询实例 117
6.3 表的连接操作 121
提示:左外连接与右外连接的操作 123
6.4 自身关联 125
6.5 SQL:1999语法 129
6.5.1 交叉连接 129
6.5.2 自然连接 130
提示:自然连接的操作 130
6.5.3 USING子句 131
6.5.4 ON子句 132
提示:关于θ连接 132
6.5.5 外连接 133
6.6 数据的集合运算 135
6.7 本章小结 138
第7章 分组统计查询 139
7.1 统计函数 140
7.2 单字段分组统计 142
提示:分享一下个人的分组规律 145
7.3 多字段分组统计 149
7.4 HAVING子句 152
7.5 本章小结 156
第8章 子查询 157
8.1 认识子查询 158
8.2 在WHERE子句中使用子查询 160
8.2.1 子查询返回单行单列数据 160
8.2.2 子查询返回单行多列数据 162
8.2.3 子查询返回多行单列数据 164
提示:关于SOME操作符 168
8.2.4 空数据判断 170
8.3 在HAVING子句中使用子查询 170
8.4 在FROM子句中使用子查询 172
8.5 在SELECT子句中使用子查询 180
8.6 WITH子句 181
8.7 分析函数 182
8.7.1 分析函数基本语法 183
提示:关于“分组”与“分区” 183
8.7.2 分析函数范例 191
8.8 行列转换 197
提示:使用XML与ANY 200
8.9 设置数据层次 205
8.10 本章小结 210
第9章 更新及事务处理 211
9.1 更新操作前的准备 212
9.2 数据的增加操作 213
9.2.1 增加数据 213
9.2.2 增加子查询结果数据 215
9.3 数据的更新操作 215
9.3.1 由用户指定更新数据 216
9.3.2 使用已有数据更新数据表 217
9.4 数据的删除操作 217
9.5 事务处理 218
9.6 锁 225
9.6.1 行级锁定 227
9.6.2 表级锁定 227
9.6.3 解除锁定 228
9.7 本章小结 229
第10章 替代变量 230
10.1 替代变量的基本概念 231
10.2 替代变量的详细说明 233
10.3 定义替代变量 236
10.4 ACCEPT指令 237
10.5 本章小结 240
第11章 表的创建与管理 241
11.1 数据表的基本概念 242
11.2 Oracle常用数据类型 242
11.3 表的创建 243
11.4 表的复制 246
11.5 数据表重命名 248
11.6 截断表 249
11.7 表的删除 250
11.8 闪回技术(FlashBack) 250
11.9 修改表结构 253
11.10 添加注释 257
11.11 设置可见/不可见字段 258
11.12 表空间 261
提示:关于数据库系统的三级模式结构 261
提示:关于数据库、表空间、表的简单理解 263
提示:关于非系统表空间的称呼 263
11.12.1 创建表空间 264
提示:Oracle中的默认表空间 265
11.12.2 使用表空间 266
11.13 本章小结 267
第12章 完整性约束 268
12.1 数据库完整性约束简介 269
12.2 非空约束NK 270
12.3 唯一约束UK 270
12.4 主键约束PK 272
12.5 检查约束CK 274
12.6 主-外键约束FK 275
12.7 查看约束 283
12.8 修改约束 284
注意:在为表中添加约束时一定要保证表中的数据没有违反约束 285
12.9 数据库综合实战 288
12.9.1 建立数据表 288
12.9.2 为数据表增加数据 290
12.9.3 数据操作 293
12.10 本章小结 298
第13章 其他数据库对象 299
13.1 视图 300
13.1.1 创建视图 301
提示:关于Oracle 12c创建视图时出现的权限不足的错误 302
13.1.2 在视图上执行DML操作 304
13.1.3 WITHCHECK OPTION子句 308
13.1.4 WITH READ ONLY子句 310
13.1.5 删除视图 311
13.2 序列 312
13.2.1 序列的作用及创建 312
13.2.2 序列的删除 314
13.2.3 创建特殊功能的序列 315
提示:设置缓存有可能造成跳号的情况 316
13.2.4 修改序列 318
13.2.5 自动序列 319
注意:自动序列对象的删除 321
13.3 同义词 321
13.4 Oracle伪列 323
13.4.1 ROWID伪列 324
13.4.2 ROWNUM伪列 326
13.4.3 Oracle 12c新特性FETCH 332
13.5 索引 334
提示:关于索引深层次学习 334
13.5.1 B Tree索引 334
提示:关于全表扫描 335
13.5.2 位图索引 340
13.5.3 删除索引 341
13.6 本章小结 341
第14章 用户权限及角色管理 343
14.1 用户管理 344
14.1.1 创建用户 344
注意:Oracle 12c的新限制 345
14.1.2 概要文件(profiles) 346
14.1.3 维护用户 348
14.1.4 删除用户 350
注意:删除用户是一个危险操作 350
14.2 权限管理 350
14.2.1 系统权限 350
提示:SYSOPER和SYSDBA权限 352
提示:用户SESSION连接 353
14.2.2 对象权限 355
14.3 角色 357
14.3.1 创建角色 358
14.3.2 角色授权 359
14.3.3 为用户授予角色 359
14.3.4 修改角色及回收角色权限 360
14.3.5 删除角色 361
14.3.6 预定义角色 361
14.4 本章小结 362
第15章 数据库设计 363
15.1 数据库设计概述 364
15.2 概念模型与E-R图概述 365
15.2.1 实体 365
15.2.2 属性 366
15.2.3 联系 366
15.2.4 E-R模型实例 367
15.3 数据库设计范式 370
15.3.1 第一范式(1NF) 371
15.3.2 第二范式(2NF) 372
提示:关于函数依赖的解释 372
15.3.3 第三范式(3NF) 377
15.3.4 鲍依斯-科得范式(BCNF) 379
15.4 Sybase PowerDesigner设计工具 381
15.4.1 概念模型设计 381
15.4.2 物理数据模型设计 385
15.5 数据库设计案例 386
15.5.1 功能描述 387
15.5.2 概念模型 388
15.5.3 物理数据模型 389
15.6 本章小结 397
第3部分 数据库编程 400
第16章 PL/SQL编程基础 400
16.1 PL/SQL简介 401
16.2 变量的声明与赋值 403
16.2.1 声明并使用变量 403
提示:关于Oracle关键字说明 403
注意:PL/SQL中的变量不区分大小写 404
16.2.2 使用%TYPE声明变量类型 405
16.2.3 使用%ROWTYPE声明变量类型 405
16.3 运算符 406
16.3.1 赋值运算符 407
16.3.2 连接运算符 407
16.3.3 关系运算符 408
16.3.4 逻辑运算符 408
16.4 数据类型划分 410
16.5 标量类型 410
16.5.1 数值型 411
提示:关于数据溢出问题 413
16.5.2 字符型 415
16.5.3 日期型 418
16.5.4 布尔型 421
16.5.5 子类型 421
16.6 程序结构 422
16.6.1 分支结构 423
提示:Oracle也支持正则验证 426
16.6.2 循环结构 431
16.6.3 循环控制 433
16.6.4 GOTO语句 435
16.7 内部程序块 435
16.8 异常处理 436
16.8.1 异常简介 437
16.8.2 使用EXCEPTION来处理异常 438
16.8.3 用户自定义异常 442
16.9 本章小结 447
第17章 集合 448
17.1 记录类型 449
17.2 索引表 454
17.3 嵌套表 457
17.3.1 定义简单类型嵌套表 457
17.3.2 定义复合类型嵌套表 460
17.3.3 在PL/SQL中使用嵌套表 463
17.4 可变数组 468
17.4.1 定义简单类型的可变数组 468
17.4.2 定义复合类型的可变数组 470
17.4.3 在PL/SQL中使用可变数组 471
17.5 集合运算符 473
17.6 集合函数 476
17.7 处理集合异常 481
17.8 使用FORALL批量绑定 483
17.9 BULK COLLECT批量接收数据 484
17.10 本章小结 485
第18章 游标 486
18.1 游标简介 487
18.2 隐式游标 487
18.3 显式游标 489
18.4 修改游标数据 498
18.4.1 FOR UPDATE子句 499
18.4.2 WHERE CURRENT OF子句 500
18.5 游标变量 502
18.6 本章小结 505
第19章 子程序 506
19.1 子程序定义 507
19.1.1 定义过程 507
19.1.2 定义函数 509
19.2 查询子程序 512
19.3 删除子程序 515
19.4 参数模式 516
提示:不再重复演示函数的参数模式 518
19.5 子程序嵌套 522
19.6 NOCOPY选项 527
19.7 自治事务 530
19.8 子程序权限 531
19.9 利用Java调用子程序 533
19.10 本章小结 535
第20章 包 536
20.1 包的定义及使用 537
20.1.1 包的基本概念 537
20.1.2 重新编译包 541
20.1.3 包的作用域 541
20.1.4 重载包中的子程序 543
20.1.5 包的初始化 544
20.1.6 包的纯度级别 546
注意:关于公用函数的说明 548
20.2 系统工具包 548
20.2.1 DBMS_OUTPUT包 548
20.2.2 DBMS_JOB包与数据库作业 551
20.2.3 DBMS_ASSERT包 555
提示:利用DBMS_ASSERT可以解决SQL注入攻击 556
20.2.4 DBMS_LOB包 556
20.3 本章小结 559
第21章 触发器 560
21.1 触发器简介 561
21.2 DML触发器 562
21.3 表级DML触发器 564
21.4 行级DML触发器 568
21.4.1 使用“:old.字段”和“:new.字段”标识符 568
注意:不能将“:new”或“:old”设置为ROWTYPE类型 571
21.4.2 使用REFERENCING子句设置别名 575
21.4.3 使用WHEN子句定义触发条件 575
21.4.4 触发器谓词 577
21.4.5 使用FOLLOWS子句 578
21.5 变异表 580
21.6 复合触发器 581
21.7 instead-of触发器 586
21.7.1 在视图上定义替代触发器 586
21.7.2 在嵌套表上定义替代触发器 591
21.8 DDL触发器 593
21.9 系统触发器 599
21.10 管理触发器 603
提示:Oracle 11g之后可以建立禁用触发器 604
21.11 触发器中调用子程序 605
21.12 本章小结 606
第22章 动态SQL 607
22.1 动态SQL简介 608
提示:如果不使用EXECUTE IMMEDIATE,则程序会出现错误 609
提示:在get_table_count_fun()函数执行时可能出现“ORA-01031:权限不足”错误提示 610
22.2 EXECUTE IMMEDIATE语句 610
22.2.1 执行动态SQL 611
22.2.2 设置绑定变量 612
22.2.3 接收DML更新行数 614
提示:也可以使用RETURN接收影响数据行的数据 615
22.3 批量绑定 616
22.4 处理游标操作 618
22.5 DBMS_SQL包简介 620
22.6 本章小结 623
第23章 面向对象编程 624
23.1 面向对象简介 625
23.2 类与对象 625
23.3 定义对象类型——类 626
23.4 操作类中的其他结构 630
23.4.1 定义函数 630
23.4.2 构造函数 632
提示:关于默认构造函数 632
23.4.3 定义MAP与ORDER函数 633
23.4.4 对象嵌套关系 637
23.4.5 继承性 639
23.4.6 函数覆写 641
23.4.7 对象多态性 642
23.4.8 使用FINAL关键字 644
23.4.9 定义抽象函数 645
23.5 对象表 646
23.5.1 创建对象表 648
23.5.2 维护对象表数据 649
23.6 对象视图 655
23.7 本章小结 656