第Ⅰ部分 Oracle PL/SQL 3
第1章 Oracle PL/SQL程序开发概览 3
1.1 PL/SQL的历史和背景 4
1.2 Oracle开发架构 6
1.2.1 数据库 7
1.2.2 PL/SQL语言 8
1.2.3 Oracle处理架构 10
1.2.4 两层模型 11
1.2.5 n层模型 12
1.3 本章小结 13
1.4 精熟测验 13
第2章 新特性 15
2.1 SQL新特性 16
2.1.1 用数据目录DIRECTORY限定LIBRARY对象 16
2.1.2 使用有效时间(VT)来定义表 17
2.1.3 增强的Oracle原生LEFT OUTER JOIN语法 18
2.1.4 基于序列的列的默认值 18
2.1.5 显式NULL插入的默认值 19
2.1.6 标识列 20
2.1.7 STRING和RAW类型大小限制的增加 21
2.1.8 将SQL语句的结果传递给外部程序 21
2.1.9 查询行限制和偏移的原生SQL支持 23
2.1.10 MySQL应用程序的Oracle数据库驱动程序 26
2.1.11 SQL CROSS APPLY、OUTER APPLY和LATERAL 26
2.1.12 BEQUEATH CURRENT_USER视图 28
2.2 PL/SQL新特性 28
2.2.1 调用者权限函数的缓存 29
2.2.2 添加PL/SQL程序单元调用者到白名单 29
2.2.3 PL/SQL类型的原生客户端API支持 30
2.2.4 新的PL/SQL包utl_call_stack 30
2.2.5 dbms_utility包添加了expand_sql_txt子程序 30
2.2.6 dbms_sql包为parse过程添加了新的模式 32
2.2.7 SQL WITH子句中的PL/SQL函数 32
2.2.8 SQL中允许PL/SQL特定的数据类型 33
2.2.9 隐式的REF CURSOR参数绑定 36
2.3 支持脚本 36
2.4 本章小结 36
2.5 精熟测验 36
第3章 PL/SQL基础知识 39
3.1 块结构 40
3.1.1 执行块 40
3.1.2 基本块结构 41
3.1.3 声明块 43
3.1.4 异常块 44
3.2 块中变量的行为 45
3.2.1 匿名块 45
3.2.2 嵌套匿名块 49
3.2.3 局部命名块 51
3.2.4 存储命名块 54
3.3 基本标量和复合数据类型 56
3.3.1 标量数据类型 56
3.3.2 属性和表的锚定 58
3.3.3 复合数据类型 60
3.4 控制结构 72
3.4.1 条件结构 72
3.4.2 迭代结构 74
3.5 异常 81
3.5.1 用户自定义异常 82
3.5.2 动态的用户自定义异常 84
3.6 批量操作 84
3.7 函数、过程和包 86
3.7.1 函数 87
3.7.2 过程 88
3.7.3 包 90
3.8 事务作用域 94
3.8.1 单事务作用域 95
3.8.2 多事务作用域 96
3.9 数据库触发器 96
3.10 本章小结 97
3.11 精熟测验 97
第4章 语言基本知识 99
4.1 词汇单元 99
4.1.1 分隔符 100
4.1.2 标识符 103
4.1.3 字面值 105
4.1.4 注释 106
4.2 变量和数据类型 107
4.2.1 变量数据类型 108
4.2.2 标量数据类型 111
4.2.3 大对象 125
4.2.4 复合数据类型 126
4.2.5 系统引用游标 130
4.3 本章小结 132
4.4 精熟测验 132
第5章 控制结构 134
5.1 条件语句 135
5.1.1 IF语句 141
5.1.2 CASE语句 145
5.1.3 条件编译语句 147
5.2 迭代语句 150
5.2.1 简单循环语句 150
5.2.2 FOR循环语句 156
5.2.3 WHILE循环语句 158
5.3 游标结构 161
5.3.1 隐式游标 162
5.3.2 显式游标 166
5.4 批语句 177
5.4.1 BULK COLLECT INTO语句 178
5.4.2 FORALL语句 182
5.5 支持脚本 187
5.6 本章小结 187
5.7 精熟测验 187
第6章 集合 189
6.1 集合介绍 190
6.2 对象类型:变长数组和表集合 192
6.2.1 变长数组集合 192
6.2.2 表集合 195
6.3 关联数组 209
6.4 Oracle集合API 216
6.4.1 COUNT方法 218
6.4.2 DELETE方法 219
6.4.3 EXISTS方法 220
6.4.4 EXTEND方法 221
6.4.5 FIRST方法 222
6.4.6 LAST方法 222
6.4.7 LIMIT方法 223
6.4.8 NEXT方法 223
6.4.9 PRIOR方法 224
6.4.10 TRIM方法 224
6.5 支持脚本 226
6.6 本章小结 226
6.7 精熟测验 226
第7章 错误管理 228
7.1 异常类型和作用域 229
7.1.1 编译时错误 230
7.1.2 运行时错误 232
7.2 异常管理内置函数 238
7.3 用户定义的异常 240
7.3.1 声明用户定义的异常 240
7.3.2 动态的用户定义的异常 242
7.4 异常堆栈函数 245
7.5 支持脚本 250
7.6 本章小结 250
7.7 精熟测验 251
第Ⅱ部分 PL/SQL编程 255
第8章 函数和过程 255
8.1 函数和过程架构 256
8.2 事务作用域 262
8.2.1 调用子例程 263
8.2.2 位置表示法 264
8.2.3 命名表示法 264
8.2.4 混合表示法 264
8.2.5 排除表示法 264
8.2.6 SQL调用表示法 265
8.3 函数 265
8.3.1 函数模型选择 267
8.3.2 创建选项 267
8.3.3 按值传递函数 279
8.3.4 按引用传递函数 291
8.4 过程 294
8.4.1 按值传递过程 295
8.4.2 按引用传递过程 297
8.5 支持脚本 299
8.6 本章小结 300
8.7 精熟测验 300
第9章 包 302
9.1 包架构 303
9.2 包规范 308
9.2.1 原型特性 309
9.2.2 连续可重用预编译器指令 311
9.2.3 变量 312
9.2.4 类型 314
9.2.5 组件:函数与过程 316
9.3 包主体 318
9.3.1 原型特性 318
9.3.2 变量 320
9.3.3 类型 322
9.3.4 组件:函数与过程 323
9.4 定义者与调用者权限模型 326
9.5 管理数据库目录中的包 329
9.5.1 查找、验证和描述包 329
9.5.2 检查依赖关系 330
9.5.3 比较验证方法:时间戳与签名 331
9.6 本章小结 332
9.7 精熟测验 332
第10章 大对象 334
10.1 使用内部存储的LOB类型 335
10.1.1 低于32K的LOB赋值 335
10.1.2 高于32K的LOB赋值 337
10.2 将文件读入内部存储的列 345
10.2.1 将本地文件读入CLOB或NCLOB列 346
10.2.2 将本地文件读入BLOB列 348
10.2.3 通过Web页面处理LOB 351
10.3 使用二进制文件(BFILE) 358
10.3.1 创建和使用虚拟目录 359
10.3.2 读取规范路径名与文件名 365
10.4 了解dbms_lob包 371
10.4.1 包常量 371
10.4.2 包异常 373
10.4.3 打开与关闭方法 373
10.4.4 操作方法 374
10.4.5 内省方法 380
10.4.6 BFILE方法 384
10.4.7 临时LOB方法 385
10.4.8 安全链接方法 387
10.5 支持脚本 390
10.5.1 从LONG转换为CLOB的脚本 390
10.5.2 管理来自于文件系统的LOB 390
10.5.3 通过web管理CLOB和BLOB LOB 390
10.5.4 通过Web管理BFILE LOB 390
10.6 本章小结 391
10.7 精熟测验 391
第11章 对象类型 393
11.1 对象基础知识 396
11.1.1 声明对象类型 396
11.1.2 实现对象主体 399
11.1.3 对象类型白名单 403
11.1.4 getter和setter 404
11.1.5 静态成员方法 406
11.1.6 比较对象 408
11.2 继承和多态 415
11.2.1 声明子类 416
11.2.2 实现子类 417
11.2.3 类型演变 421
11.3 实现对象类型集合 422
11.3.1 声明对象类型集合 422
11.3.2 实现对象类型集合 423
11.4 支持脚本 426
11.5 本章小结 426
11.6 精熟测验 426
第12章 触发器 429
12.1 触发器简介 430
12.2 数据库触发器架构 432
12.3 数据定义语言触发器 435
12.3.1 事件属性函数 437
12.3.2 构建DDL触发器 448
12.4 数据操作语言触发器 450
12.4.1 语句级触发器 451
12.4.2 行级触发器 453
12.5 复合触发器 460
12.6 Instead of触发器 464
12.7 系统和数据库事件触发器 468
12.8 触发器限制 470
12.8.1 最大触发器尺寸 470
12.8.2 SQL语句 470
12.8.3 LONG和LONGRAW数据类型 471
12.8.4 变异表 471
12.8.5 系统触发器 472
12.9 支持脚本 473
12.10 本章小结 473
12.11 精熟测验 473
第13章 动态SQL 475
13.1 动态SQL架构 476
13.2 本地动态SQL(NDS) 477
13.2.1 动态语句 478
13.2.2 带输入的动态语句 481
13.2.3 带输入和输出的动态语句 483
13.2.4 带未知数量的输入的动态语句 486
13.3 dbms_sql包 488
13.3.1 动态语句 489
13.3.2 带输入变量的动态语句 492
13.3.3 带输入变量和固定输出的动态语句 494
13.3.4 带输入和输出变量的动态语句 498
13.3.5 dbms_sql包定义 503
13.4 支持脚本 516
13.5 本章小结 517
13.6 精熟测验 517
第Ⅲ部分 附录和术语表 521
附录A Oracle数据库入门 521
A.1 Oracle数据库架构 522
A.2 启动和停止Oracle Database 12c服务器 528
A.2.1 UNIX或Linux操作 529
A.2.2 Microsoft Windows操作 533
A.3 启动和停止Oracle侦听器 534
A.4 多版本并发控制 539
A.4.1 数据事务 540
A.4.2 DML锁定和隔离控制 542
A.5 定义者权限和调用者权限 543
A.5.1 定义者权限 544
A.5.2 调用者权限 544
A.6 SQL交互和批处理 545
A.6.1 SQL*Plus命令行界面 545
A.6.2 Oracle SQL Developer界面 564
A.7 数据库管理员 570
A.7.1 配置用户 570
A.7.2 使用数据库约束 577
A.7.3 安全加固 586
A.7.4 数据管理 595
A.8 SQL调优 597
A.8.1 EXPLAIN PLAN语句 598
A.8.2 DBMS_XPLAN包 599
A.9 SQL跟踪 603
A.9.1 跟踪会话状态 603
A.9.2 将原始跟踪文件转换为可读跟踪文件 605
A.10 本附录小结 606
附录B SQL入门 607
B.1 Oracle SQL数据类型 610
B.2 数据定义语言(DDL) 614
B.2.1 CREATE语句 615
B.2.2 ALTER语句 675
B.2.3 RENAME语句 691
B.2.4 DROP语句 691
B.2.5 TRUNCATE语句 694
B.2.6 COMMENT语句 694
B.3 数据管理语言(DML) 694
B.3.1 符合ACID的事务 695
B.3.2 INSERT语句 698
B.3.3 UPDATE语句 712
B.3.4 DELETE语句 724
B.3.5 MERGE语句 728
B.4 事务控制语言(TCL) 735
B.5 查询:SELECT语句 736
B.5.1 返回列或者返回列运算结果的查询 738
B.5.2 聚合查询 751
B.5.3 选择性返回列或结果的查询 756
B.5.4 联接结果 765
B.5.5 数据的联接 767
B.5.6 集合的联接 775
B.6 本附录小结 778
附录C SQL内置函数 779
C.1 字符函数 780
C.1.1 ASCII函数 780
C.1.2 ASCHSTR函数 780
C.1.3 CHR函数 781
C.1.4 CONCAT函数 781
C.1.5 INITCAP函数 782
C.1.6 INSTR函数 782
C.1.7 LENGTH函数 783
C.1.8 LOWER函数 783
C.1.9 LPAD函数 784
C.1.10 LTRIM函数 784
C.1.11 REPLACE函数 785
C.1.12 REVERSE函数 785
C.1.13 RPAD函数 785
C.1.14 RTRIM函数 786
C.1.15 UPPER函数 786
C.2 数据类型转换函数 787
C.2.1 CAST函数 787
C.2.2 CONVERT函数 789
C.2.3 TO_CHAR函数 790
C.2.4 TO_CLOB函数 792
C.2.5 TO_DATE函数 792
C.2.6 TO_LOB函数 793
C.2.7 TO_NCHAR函数 794
C.2.8 TO_NCLOB函数 795
C.2.9 TO_NUMBER函数 795
C.3 日期-时间转换函数 796
C.3.1 ADD_MONTHS函数 796
C.3.2 CURRENT_DATE函数 796
C.3.3 CURRENT_TIMESTAMP函数 796
C.3.4 DBTIMEZONE函数 797
C.3.5 EXTRACT函数 797
C.3.6 FROM_TZ函数 798
C.3.7 LAST_DAY函数 798
C.3.8 LOCALTIMESTAMP函数 799
C.3.9 MONTHS_BETWEEN函数 799
C.3.10 NEW_TIME函数 799
C.3.11 ROUND函数 800
C.3.12 SYSDATE函数 801
C.3.13 SYSTIMESTAMP函数 801
C.3.14 TO_CHAR(date)函数 801
C.3.15 TO_DSINTERVAL函数 802
C.3.16 TO_TIMESTAMP函数 803
C.3.17 TO_TIMESTAMP_TZ函数 803
C.3.18 TO-YMINTERVAL函数 804
C.3.19 TRUNC(date)函数 804
C.3.20 TZ OFFSET函数 804
C.4 集合管理函数 805
C.4.1 CARDINALITY函数 805
C.4.2 COLLECT函数 805
C.4.3 POWERMULTISET函数 809
C.4.4 POWERMULTISET_BY_CARDINALITY函数 809
C.4.5 SET函数 810
C.5 集合运算符 810
C.5.1 CARDINALITY运算符 812
C.5.2 EMPTY运算符 812
C.5.3 MULTISET运算符 812
C.5.4 MULTISET EXCEPT运算符 813
C.5.5 MULTISET INTERSECT运算符 814
C.5.6 MULTISET UNION运算符 814
C.5.7 SET运算符 815
C.5.8 SUBMULTISET OF运算符 816
C.6 数字函数 816
C.6.1 CEIL函数 817
C.6.2 FLOOR函数 817
C.6.3 MOD函数 817
C.6.4 POWER函数 819
C.6.5 REMAINDER函数 820
C.6.6 ROUND函数 821
C.7 错误报告函数 821
C.7.1 SQLCODE函数 821
C.7.2 SQLERRM函数 822
C.8 杂项函数 823
C.8.1 BFILENAME函数 824
C.8.2 COALESCE函数 826
C.8.3 DECODE函数 826
C.8.4 DUMP函数 827
C.8.5 EMPTY_BLOB函数 828
C.8.6 EMPTY_CLOB函数 830
C.8.7 GREATEST函数 831
C.8.8 LEAST函数 833
C.8.9 NANVL函数 834
C.8.10 NULLIF函数 835
C.8.11 NVL函数 836
C.8.12 SYS_CONTEXT函数 836
C.8.13 TABLE函数 839
C.8.14 TREAT函数 842
C.8.15 USERENV函数 843
C.8.16 VSIZE函数 844
C.9 本附录小结 844
附录D PL/SQL内置程序包和类型 845
D.1 Oracle Database 11g和12c的新程序包 846
D.2 程序包使用示例 852
D.2.1 DBMS_APPLICATION_INFO示例 853
D.2.2 DBMS_COMPARISON 858
D.2.3 DBMS_CRYPTO 863
D.2.4 DBMS_FGA 866
D.2.5 案例研究:查询工具 867
D.3 支持脚本 874
D.4 本附录小结 874
附录E 正则表达式入门 875
E.1 正则表达式简介 876
E.1.1 字符类 876
E.1.2 校准类 880
E.1.3 元字符 880
E.1.4 元序列 880
E.1.5 字面值 881
E.2 正则表达式实现 881
E.2.1 REGEXP_COUNT函数 882
E.2.2 REGEXP_INSTR函数 885
E.2.3 REGEXP_LIKE函数 886
E.2.4 REGEXP_REPLACE函数 887
E.2.5 REGEXP_SUBSTR函数 889
E.3 支持脚本 890
E.4 本附录小结 890
附录F 包装PL/SQL代码入门 891
F.1 包装PL/SQL的限制 892
F.1.1 PL/SQL的wrap实用程序的局限性 892
F.1.2 DBMS_DDL.WRAP函数的限制 892
F.2 使用wrap命令行实用程序 893
F.3 使用DBMS DDL命令行实用程序 893
F.3.1 WRAP函数 893
F.3.2 CREATE_WRAPPED过程 898
F.4 本附录小结 899
附录G PL/SQL分层的配置文件入门 900
G.1 配置架构 901
G.2 收集配置文件数据 902
G.3 配置文件数据 905
G.3.1 读取原始输出 905
G.3.2 定义PL/SQL配置文件表 907
G.3.3 查询分析数据 909
G.4 使用plshprof命令行实用程序 910
G.5 支持脚本 912
G.6 本附录小结 912
附录H PL/SQL保留字和关键字 913
附录I 精熟测验答案 927
术语表 951