目录 3
第Ⅰ部分 入门 3
第1章 PL/SQL入门 3
1.1 使用PL/SQL的优势 4
1.2 构造PL/SQL代码块 6
1.2.1 PL/SQL代码块示例 6
1.2.2 嵌套块示例 7
1.3.1 条件结构 8
1.3 PL/SQL的程序结构 8
1.3.2 CASE语句与CASE表达式 9
1.3.3 迭代结构 9
1.4 PL/SQL环境 11
1.5 PL/SQL 9i的新特性 13
1.5.1 PL/SQL 9i特有的非面向对象特征 13
1.5.2 PL/SQL特有的面向对象的特征 18
1.6 小结 21
2.1 游标简介 25
第Ⅱ部分 PL/SQL 9i的非面向对象特性 25
第2章 游标 25
2.1.1 显式游标 26
2.1.2 SELECT FOR UPDATE游标 40
2.1.3 隐式游标 42
2.2 游标变量 48
2.2.1 使用游标变量的原因 48
2.2.2 定义游标变量 48
2.2.3 使用游标变量 50
2.2.4 从存储子程序中返回结果集 58
2.3 游标表达式 58
2.3.1 使用游标表达式的原因 59
2.3.2 声明游标表达式 59
2.3.3 游标表达式的使用 61
2.3.4 使用多层嵌套游标的游标表达式 63
2.3.5 将游标表达式作为从SQL中调用函数的参数 64
2.4 小结 69
第3章 PL/SQL记录与Index-by表 70
3.1 记录 71
3.1.1 记录的定义 71
3.1.2 记录类型的使用 72
3.1.3 记录的初始化 75
3.1.4 记录的赋值 76
3.1.5 其他记录类型 79
3.2 Index-by表 82
3.2.1 Index-by表的定义 83
3.2.2 Index-by表的使用 84
3.2.3 Index-by表的方法 90
3.2.4 记录的Index-by表 94
3.2.5 联合数组 95
3.3 小结 97
第4章 错误消息处理 98
4.1 PL/SQL异常:类型与定义 98
4.1.1 错误类型 98
4.1.3 错误文本 99
4.1.2 错误代号 99
4.1.4 PL/SQL的内置错误 100
4.1.5 异常处理程序 101
4.1.6 PL/SQL异常的类型 102
4.2 处理PL/SQL异常 102
4.2.1 处理预定义异常 103
4.2.2 处理用户自定义异常 109
4.2.3 处理未预定义的Oracle错误 111
4.2.4 PRAGMA_EXCEPTION_INIT 112
4.2.5 处理在声明和异常处理部分引发的异常 114
4.2.6 PL/SQL异常的作用域 117
4.3 用户定义的PL/SQL错误消息 117
4.3.1 在PL/SQL中定义用户自定义错误消息 118
4.3.2 在PL/SQL中处理用户自定义的错误消息 118
4.4 PL/SQL错误提示和异常处理 122
4.5 小结 122
第5章 存储子程序(过程、函数和包) 123
5.1.1 过程的创建和使用 124
5.1 过程和函数的创建与使用 124
5.1.2 函数的创建和使用 126
5.1.3 过程或函数的执行 128
5.1.4 过程或函数参数的定义 130
5.1.5 存储子程序的元数据 136
5.2 PL/SQL包 140
5.3 返回结果集的子程序 152
5.4 在SQL语句中使用存储函数 154
5.4.1 从SOL中调用存储函数的标准 156
5.4.2 从SQL中调用函数的纯度等级 156
5.5 通过引用传递参数 161
5.5.1 NOCOPY和异常处理 162
5.5.2 NOCOPY对性能的提高 163
5.5.3 使用NOCOPY的一些限制 164
5.6 定义者和调用者权限 165
5.6.1 调用者权限模型 165
5.6.2 一个应用程序,多个模式 165
5.6.3 调用者权限和动态SQL 168
5.7 包的其他特性 169
5.7.1 包过程和函数的重载 169
5.7.2 连续可重用包 174
5.8 小结 177
第6章 数据库触发器 178
6.1 PL/SQL触发器:种类与定义 178
6.1.1 触发器的种类 179
6.1.2 触发器的定义 179
6.1.3 触发器与元数据 186
6.1.4 触发器的其他一些概念 189
6.2 只读视图、可更新视图和INSTEAD-OF触发器 191
6.2.1 定义INSTEAD-OF触发器 192
6.2.2 INSTEAD-OF触发器的使用 195
6.3 新的数据库触发器 196
6.3.1 系统事件和用户事件触发器 196
6.3.2 触发器属性 197
6.3.3 事件列表 198
6.4 小结 201
第7章 本地动态SQL和动态PL/SQL 202
7.1 DBMS_SQL与本地动态SQL比较 203
7.2 本地动态SQL语句 204
7.3 动态DDL 205
7.4 动态SELECTS 208
7.4.1 单行SELECTS 208
7.4.2 多行SELECTS 210
7.5 动态INSERT、UPDATE和DELETE 213
7.6 绑定变量的使用 214
7.7 动态PL/SQL 215
7.8 本地动态SQL中的异常处理 216
7.9 本地动态SQL和对象 217
7.10 小结 217
8.1 自治事务前的事务管理 218
8.2 自治事务的定义和使用 218
第8章 自治事务 218
8.2.1 自治事务的优点 219
8.2.2 将事务指定为自治事务 219
8.2.3 自治事务处理 222
8.2.4 自治触发器 223
8.2.5 自治事务的一些关键问题 225
8.3 小结 228
第9章 本地批绑定 229
9.1 批DML 230
9.1.1 SQL出错以后的情况 234
9.1.2 SAVE EXCEPTION子句 234
9.1.3 FORALL语句的属性 237
9.2 批查询 238
9.2.1 在SELECR...INTO语句使用BULK COLLECT 238
9.2.2 在Fetching中使用BULK COLLECT 240
9.2.3 在RETURNING INTO中使用BULK COLLECT 241
9.2.4 宿主数组和批DML 243
9.3 批动态SQL 243
9.3.2 将EXECUTE IMMEDIATE与FORALL语句结合在一起使用进行批DML 244
9.3.1 通过使用SELECT...INTO语句,将BULK COLLECT与EXECUTE IMMEDIATE结合在一起进行批查询 244
9.3.3 将FORALL...RETURNING INTO...与EXECUTE IMMEDIATE结合在一起使用进行批DML 245
9.3.4 使用FETCH...BULK COLLECT INTO...从使用本地动态SQL打开的游标中进行批取值 245
9.4 小结 246
第Ⅲ部分 PL/SQL 9i的面向对象特性 249
第10章 对象的世界 249
10.1 对象类型与对象表 249
10.1.1 PL/SQL中对象类型和它们的创建与使用 249
10.1.2 定义对象类型 250
10.1.3 对象实例及其初始化 252
10.1.4 方法 254
10.1.5 修改和删除对象类型 261
10.1.6 数据库中的对象 261
10.1.7 对象与本地动态SQL 268
10.2 类型继承 275
10.3 动态方法调度 281
10.4 类型演化 283
10.4.1 对象类型属性的改变 284
10.4.2 对象类型方法的改变 285
10.4.3 类型层次结构中对象类型的INSTANTIABLE和FINAL属性的演化 286
10.4.4 将对一个类型所做的更改传播到从属的类型和表中 286
10.5 Java对象存储:Java语言的SQL类型或SQLJ对象类型 286
10.5.1 创建SQLJ对象类型映射到其中的自定义Java类 287
10.5.2 把类加载到Oracle 9i数据库 288
10.5.3 指定从对象类型到Java类的映射,创建SQLJ对象类型 289
10.5.4 在PL/SQL或SQL中像使用任一对象类型一样使用SQLJ对象类型 290
10.6.1 用户自定义操作符的定义方法 291
10.6 用户自定义操作符 291
10.6.2 函数与用户自定义操作符的比较 293
10.6.3 用户自定义操作符的用处 293
10.6.4 用户自定义操作符的调用 293
10.6.5 在PL/SQL中使用用户自定义操作符 294
10.6.6 删除用户自定义操作符 295
10.7 小结 296
11.1.1 VARRARS 297
第11章 集合(VARRAYS和嵌套表) 297
11.1 PL/SQL中集合的创建和使用 297
11.1.2 嵌套表 302
11.1.3 集合方法 307
11.1.4 数据库中的集合 311
11.2 表函数 318
11.2.1 包含对象类型的表函数 319
11.2.2 Oracle 9i中表函数的新特性 319
11.3 多层集合 324
11.4 小结 328
第12章 大对象 329
12.1 LOB简介 329
12.2 BLOB 330
12.3 CLOB 331
12.4 BFILE 333
12.5 DBMS_LOB包 334
12.5.1 从外部BFILE为BLOB列赋值 341
12.5.2 对CLOB执行读和写操作 342
12.5.3 读取BFILE的长度 344
12.6 TO_LOB函数 345
12.6.1 使用ALTER TABLE...MODIFY语句将LONG复制到LOB 346
12.6.2 使用TO_CLOB和TO_BLOB函数将LONG复制到LOB 347
12.7 小结 347
第Ⅳ部分 PL/SQL与Java和Web 351
第1 3章 PL/SQL与JAVA 351
13.1 在数据库中使用Java 351
13.1.1 执行文件I/O 352
13.1.2 Oracle 9i中Java存储过程的新特性 352
13.2 PL/SQL调用Java:Java存储过程 352
13.2.1 从服务器端PL/SQL调用Java存储过程 352
13.2.2 从非服务器端PL/SQL中调用Java存储过程 353
13.2.3 Java存储过程和PL/SQL存储过程的比较 353
13.3 创建Java存储过程 353
13.3.1 创建Java存储过程的基本步骤 353
13.3.3 加载Java方法 358
13.3 2 从SQL和(或)PL/SQL中调用Java存储过程 358
13.3.4 将Java方法发布到数据库 365
13.4 执行Java存储过程 374
13.4.1 从顶层执行 374
13.4.2 从数据库触发器中执行 375
13.4.3 从SQL DML中执行 375
13.4.4 从PL/SQL中执行 376
13.5 返回结果集的Java存储过程 378
13.5.1 写一个返回结果集的Java方法并将其编译生成一个.class文件 378
13.5.2 将.class文件加载到Oracle 9i数据库中 380
13.5.3 在Oracle 9i数据库中,使用PL/SQL调用规范发布Java方法 380
13.5.4 使用PL/SQL调用规范调用Java存储过程 380
13.6 小结 381
第14章 PL/SQL与Web 382
14.1 在PL/SQL中使用HTML 382
14.1.1 创建一个数据库访问描述符 383
14.1.3 将存储过程作为URL进行调用 387
14.1.2 创建存储过程 387
14.1.4 在PL/SQL中使用HTML时传递参数 389
14.2 HTML中的PL/SQL:PL/SQL Server Page 392
14.2.1 PSP基础 393
14.2.2 开发PL/SQL Server Page 394
14.3 使用PL/SQL构建面向Web的应用程序 396
14.3.1 用户接口 396
14.3.2 业务逻辑 397
14.3.3 Organization Web应用程序的调用 400
14.4 使用PL/SQL发送电子邮件 403
14.5 小结 405
第Ⅴ部分 PL/SQL性能与标准 409
第15章 影响性能的因素 409
15.1 一些PL/SQL调整过程 409
15.2 PL/SQL代码的本地编译 410
15.2.1 本地编译的工作过程 410
15.2.2 性能受益 411
15.2.3 附加参数 411
15.3.1 参数传递的过程 412
15.3 通过引用传递参数 412
15.4 使用本地动态SQL 413
15.4.1 本地动态SQL的执行过程 413
15.3.2 性能受益 413
15.4.2 性能受益 414
15.5 使用批绑定 414
15.5.1 批绑定的过程 414
15.6 使用RETURNING子句 415
15.6.1 RETURNING子句的工作过程 415
15.5.2 性能受益 415
15.6.2 性能受益 416
15.7 使用对象类型和集合 416
15.8 使用管道表函数 416
15.8.1 管道表函数的工作过程 416
15.8.2 性能受益 416
15.9 小结 417
第16章 PL/SQL编码标准 418
16.1 编码标准 418
16.1.2 游标 419
16.1.1 PL/SQL入门 419
16.1.3 PL/SQL记录和Index-by表 420
16.1.4 错误消息处理 421
16.1.5 子程序 422
16.1.6 数据库触发器 422
16.1.7 本地动态SQL 423
16.1.8 自治事务 423
16.1.9 本地批绑定 424
16.1.10 数据库对象 424
16.1.11 集合 425
16.1.12 大对象 425
16.1.13 数据库中的Java 426
16.2 小结 426
第Ⅵ部分 附录 429
附录A 案例分析与模式对象 429
A.1 组织层次系统 430
A.2 订单录入应用系统 432