第一部分 概述及开发环境 1
第1章 PL/SQL概述 1
1.1 为什么使用PL/SQL 1
1.1.1 PL/SQL和网络流量 2
1.1.2 标准 3
1.2 PL/SQL的功能特性 3
1.2.1 语句块结构 4
1.2.2 错误处理 4
1.2.3 变量和类型 5
1.2.4 条件语句 5
1.2.5 循环结构 6
1.2.6 游标 7
1.2.7 过程和函数 7
1.2.8 包 8
1.2.9 集合 9
1.3 本书使用的约定 9
1.3.1 PL/SQL和Oracle版本 9
1.3.2 Oracle文档 11
1.3.3 光盘内容 11
1.4 范例样表 12
1.5 小结 19
第2章 开发及运行环境 20
2.1 应用程序模型和PL/SQL 20
2.1.1 两层模型 20
2.1.2 三层模型 24
2.1.3 连接服务器 25
2.2 PL/SQL开发工具 25
2.2.1 SQL?Plus 26
2.2.2 Rapid SQL 30
2.2.3 DBPartner Debugger 34
2.2.4 SQL Navigator 37
2.2.5 TOAD 41
2.2.6 SQL-Programmer 44
2.2.7 PL/SQL Developer 48
2.2.8 开发工具小结 50
2.3 小结 52
第二部分 PL/SQL基本特性 53
第3章 PL/SQL基础 53
3.1 PL/SQL语句块 53
3.2 词法单元 59
3.2.1 标识符 60
3.2.2 分界符 62
3.2.3 文字 62
3.2.4 注释 64
3.3 变量声明 65
3.3.1 声明语法 65
3.3.2 变量初始化 66
3.4 PL/SQL类型 66
3.4.1 标量类型 67
3.4.2 复合类型 74
3.4.3 引用类型 74
3.4.4 LOB类型 74
3.4.5 对象类型 74
3.4.6 使用%TYPE 75
3.4.7 用户定义子类型 75
3.4.8 数据类型之间的转换 76
3.4.9 变量作用域和可见性 78
3.5 表达式和运算符 79
3.5.1 赋值 79
3.5.2 表达式 80
3.6 PL/SQL控制结构 82
3.6.1 IF-THEN-ELSE 82
3.6.2 CASE 86
3.6.3 循环 89
3.6.4 GOTO和标号 93
3.6.5 编译指示 95
3.7 PL/SQL记录 96
3.7.1 记录赋值 97
3.7.2 使用%ROWTYPE 98
3.8 PL/SQL风格指南 99
3.8.1 注释风格 99
3.8.2 变量名风格 100
3.8.3 大写风格 101
3.8.4 缩进风格 101
3.8.5 常见风格 101
3.9 小结 102
第4章 PL/SQL中的SQL 103
4.1 SQL语句 103
4.1.1 在PL/SQL中使用SQL 103
4.1.2 使用动态SQL 104
4.2 在PL/SQL中使用DML 105
4.2.1 SELECT 106
4.2.2 INSERT 108
4.2.3 UPDATE 109
4.2.4 DELETE 110
4.2.5 WHERE子句 111
4.2.6 批绑定 113
4.2.7 RETURNING子句 114
4.2.8 表引用 116
4.2.9 数据库链接 116
4.2.10 同义词 117
4.3 伪列 117
4.3.1 CURRVAL和NEXTVAL 117
4.3.2 LEVEL 118
4.3.3 ROWID 118
4.3.4 ROWNUM 119
4.4 GRANT、REVOKE和权限 119
4.4.1 对象和系统权限 119
4.4.2 GRANT和REVOKE 120
4.4.3 角色 121
4.5 事务控制 123
4.5.1 COMMIT和ROLLBACK 123
4.5.2 保存点 124
4.5.3 事务和语句块 125
4.5.4 自治事务 126
4.6 小结 130
第5章 内置SQL函数 131
5.1 概述 131
5.2 返回字符值的字符函数 131
5.2.1 SUBSTR、SUBSTRB、SUBSTRC、SUBSTR2和SUBSTR4 133
5.2.2 SOUNDEX 134
5.3 返回数字值的字符函数 135
5.3.1 INSTR、INSTRB、INSTRC、INSTR2和INSTR4 136
5.3.2 LENGTH、LENGTHB、LENGTHC、LENGTH2和LENGTH4 137
5.4 NLS函数 138
5.5 数字函数 139
5.6 日期和时间函数 142
5.7 转换函数 145
5.7.1 TO_CHAR(日期和日期时间) 147
5.7.2 TO_CHAR(数字) 149
5.7.3 TO_DATE 151
5.7.4 TO_NUMBER 151
5.7.5 TO_TIMESTAMP和TO_TIMESTAMP_TZ 151
5.8 聚集和分析函数 152
5.9 其他函数 154
5.9.1 DUMP 156
5.9.2 USERENV 157
5.10 小结 158
第6章 游标 159
6.1 什么是游标 159
6.1.1 处理显示游标 160
6.1.2 处理隐式游标 167
6.2 游标检索循环 168
6.2.1 简单循环 168
6.2.2 WHILE循环 170
6.2.3 游标FOR循环 171
6.2.4 NO_DATA_FOUND与%NOTFOUND 173
6.2.5 SELECT FOR UPDATE游标 173
6.3 游标变量 177
6.3.1 声明游标变量 177
6.3.2 为游标变量分配存储空间 178
6.3.3 为查询打开游标变量 179
6.3.4 关闭游标变量 180
6.3.5 游标变量范例一 180
6.3.6 游标变量范例二 182
6.3.7 使用游标变量的限制 183
6.4 小结 184
第7章 错误处理 185
7.1 什么是异常 185
7.1.1 声明异常 187
7.1.2 抛出异常 190
7.1.3 处理异常 191
7.1.4 EXCEPTION_INIT编译指示 196
7.1.5 使用RAISE_APPLICATION_ERROR 197
7.2 异常传播 200
7.2.1 可执行部分产生的异常 200
7.2.2 在声明部分出现的异常 203
7.2.3 在异常部分产生的异常 204
7.3 异常准则 205
7.3.1 异常的作用域 206
7.3.2 避免未处理异常 207
7.3.3 指定错误位置 207
7.4 通用错误处理器 208
7.5 小结 216
第8章 集合 217
8.1 声明和使用集合类型 217
8.1.1 index-by表 217
8.1.2 嵌套表 221
8.1.3 可变数组 224
8.1.4 多层集合 227
8.1.5 集合类型之间的比较 228
8.2 数据库中的集合 229
8.2.1 存储集合的隐含式 229
8.2.2 操作整个集合 232
8.2.3 操作单个集合元素 238
8.3 集合方法 243
8.3.1 EXISTS 244
8.3.2 COUNT 246
8.3.3 LIMIT 246
8.3.4 FIRST和LAST 247
8.3.5 NEXT和PRIOR 247
8.3.6 EXTEND 248
8.3.7 TRIM 251
8.3.8 DELETE 252
8.4 小结 254
第三部分 更多PL/SQL特性 255
第9章 创建过程、函数和包 255
9.1 过程与函数 255
9.1.1 创建子程序 256
9.1.2 子程序参数 260
9.1.3 CALL语句 277
9.1.4 过程与函数 279
9.2 包 279
9.2.1 包的说明 279
9.2.2 包体 280
9.2.3 包和范围 282
9.2.4 重载封装子程序 285
9.2.5 包的初始化 288
9.3 小结 289
第10章 使用过程、函数和包 290
10.1 子程序位置 290
10.1.1 存储子程序和数据字典 290
10.1.2 局部子程序 292
10.1.3 存储子程序与局部子程序 297
10.2 存储子程序和包的考虑事项 298
10.2.1 子程序依赖性 298
10.2.2 包运行时状态 307
10.2.3 特权和存储子程序 312
10.3 在SQL语句中使用存储函数 321
10.3.1 纯度等级 321
10.3.2 缺省参数 327
10.3.3 在Oracle8i中从SQL调用存储函数 327
10.4 在共享池中的锁定 330
10.4.1 KEEP 330
10.4.2 UNKEEP 331
10.4.3 SIZES 331
10.4.4 ABORTED_REQUEST_THRESHOLD 331
10.5 小结 331
第11章 数据库触发器 332
11.1 触发器的类型 332
11.2 创建触发器 335
11.2.1 创建DML触发器 335
11.2.2 创建Instead-Of触发器 343
11.2.3 创建系统触发器 349
11.2.4 其他触发器问题 354
11.2.5 触发器和数据字典 358
11.3 变异表 359
11.3.1 变异表的例子 361
11.3.2 变异表错误的解决 362
11.4 小结 364
第12章 高级特性 365
12.1 语言特性 365
12.1.1 外部例程 365
12.1.2 本地动态SQL 367
12.1.3 成批绑定 372
12.1.4 对象类型 380
12.1.5 大对象 384
12.1.6 管道化表函数 386
12.2 高级包 387
12.2.1 DBMS_SQL 387
12.2.2 DBMS_PIPE 388
12.2.3 DBMS_ALERT 390
12.2.4 UTL_FILE 391
12.2.5 UTL_TCP 392
12.2.6 UTL_SMTP 392
12.2.7 UTL_HTTP 393
12.2.8 UTL_INADDR 394
12.2.9 DBMS_JOB 394
12.2.10 DMBS_LOB 395
12.3 小结 399
附录 401
附录A 包指南 401
附录B PL/SQL保留字 414
附录C 数据字典 417