目 录第Ⅰ部分 绪 论
第1章 PL/SQL入门 3
1.1 程序设计语言简介 4
1.2 什么是PL/SQL 5
1.2.1 结构化查询语言SQL 5
1.2.2 关系数据库简介 6
1.2.3 PL/SQL与SQL 8
1.2.4 PL/SQL与Java 9
1.2.5 PL/SQL的历史和功能 10
1.3 语言基础 12
1.3.1 匿名块(Anonymous Blocks) 12
1.3.2 过程(Procedure) 13
1.3.3 函数(Function) 13
1.3.4 包(Package) 13
1.3.5 对象类型(Object Type) 13
1.4 PL/SQL语句的处理 14
1.4.1 解释执行 14
1.4.2 本地编译 14
1.5 如何充分使用本书 14
1.5.1 读者范围 14
1.5.2 目标 15
1.5.3 范围 15
1.5.4 先决条件 15
1.5.5 格式约定 16
1.5.6 示例 16
1.6 小结 17
第2章 使用SQL*Plus和JDeveloper 19
2.1 SQL*Plus 20
2.1.1 连接数据库实例 20
2.1.2 测试连接 21
2.1.3 使用SQL*Plus 22
2.1.4 更改SQL*Plus会话设置 25
2.1.5 从文件中运行脚本 25
2.1.6 使用SQL*Plus和PL/SQL在
屏幕上输出内容 26
2.2 JDeveloper 27
2.2.1 JDeveloper的安装 27
2.2.2 在JDeveloper中使用PL/SQL 29
2.3 小结 33
第3章 PL/SQL基础知识 35
3.1 PL/SQL代码块 36
3.1.1 代码块的基本结构 36
3.1.2 匿名块 38
3.1.3 命名块 41
3.1.4 嵌套块 48
3.1.5 触发器 49
3.1.6 对象类型 50
3.2 PL/SQL的语言规则与约定 51
3.3 PL/SQL的数据类型 60
3.3.1 标量类型 61
3.3.2 字符/字符串类型 61
3.3.3 数值类型 64
3.3.4 布尔类型 66
3.3.5 日期/时间类型 66
3.3.6 复合类型 69
3.3.7 引用类型 69
3.3.8 LOB类型 70
3.4 使用变量 70
3.4.1 %TYPE 71
3.4.2 %ROWTYPE 72
3.4.3 变量的生存范围 72
3.4.4 绑定变量 74
3.5 代码隐藏功能 77
3.6 表达式 80
3.6.1 赋值操作符 80
3.6.2 串联操作符 81
3.7 程序流的控制 82
3.7.1 条件判断语句 82
3.7.2 循环执行 88
3.7.3 使用GOTO语句导航代码的
执行顺序 91
3.8 小结 92
第4章 PL/SQL与SQL 93
4.1 事务处理 94
4.1.1 事务与锁定 94
4.1.2 自治事务 98
4.1.3 事务设置 102
4.2 数据检索 102
4.2.1 SQL SELECT语句 103
4.2.2 模式匹配 106
4.2.3 信息检索 109
4.3 游标 112
4.3.1 游标的工作过程 113
4.3.2 显式游标 115
4.3.3 隐式游标 121
4.3.4 游标变量 121
4.3.5 游标子查询 123
4.3.6 打开游标 124
4.4 DML与DDL 125
4.4.1 预编译 126
4.4.2 使用DML控制数据 126
4.4.3 动态SQL简介 129
4.5 ROWID和ROWNUM的用法 130
4.5.1 ROWID 131
4.5.2 ROWNUM 133
4.6 内置的SQL函数 136
4.6.1 字符函数 136
4.6.2 数字函数 137
4.6.3 日期函数 137
4.6.4 转换函数 138
4.6.5 错误函数 139
4.6.6 其他函数 140
4.7 小结 141
第5章 记录 143
5.1 记录概述 143
5.2 记录的使用方法 144
5.2.1 记录类型的定义 145
5.2.2 以形参的形式定义和使用
记录类型 156
5.2.3 以形参的形式定义和使用
对象类型 159
5.2.4 从函数中返回记录类型的值 161
5.2.5 将记录类型作为函数返回值的
定义和使用方法 162
5.2.6 将对象类型作为函数返回值的
定义和使用方法 163
5.2.7 检验记录类型的工作过程 166
5.3 小结 167
第6章 集合 169
6.1 集合简介 169
6.2 集合的使用方法 170
6.2.1 Varrays集合的使用方法 172
6.2.2 嵌套表的使用方法 187
6.2.3 联合数组的使用方法 205
6.3 Oracle 10g的集合API 222
6.3.1 COUNT方法 225
6.3.2 DELETE方法 226
6.3.3 EXISTS方法 228
6.3.4 EXTEND方法 230
6.3.5 FIRST方法 232
6.3.6 LAST方法 233
6.3.7 LIMIT方法 233
6.3.8 NEXT方法 235
6.3.9 PRIOR方法 235
6.3.10 TRIM方法 235
6.4 小结 237
第7章 错误处理 239
7.1 什么是异常 239
7.1.1 异常的声明 241
7.1.2 异常的引发 243
7.1.3 异常的处理 244
7.1.4 EXCEPTION_INIT编译器
指令 250
7.1.5 RAISE_APPLICATION_ERROR
的使用方法 251
7.2 异常的传播 254
7.2.1 在执行部分引发的异常 255
7.2.2 在声明部分引发的异常 257
7.2.3 在异常部分引发的异常 257
7.3 使用异常的准则 259
7.3.1 异常的范围 259
7.3.2 避免未处理异常 260
7.3.3 标识发生错误的位置 261
7.3.4 异常与事务 262
7.3.5 异常代码的编写风格 262
7.4 小结 263
第8章 过程、函数和包的创建 265
8.1 过程和函数 265
8.1.1 子程序的创建 266
8.1.2 子程序的参数 270
8.1.3 CALL语句 287
8.1.4 过程和函数的比较 289
8.2 包 290
8.2.1 包规范 290
8.2.2 包主体 291
8.2.3 包和范围 293
8.2.4 包子程序的重载 295
8.2.5 包的初始化 299
8.3 小结 301
第9章 过程、函数和包的应用 303
9.1 子程序的存储位置 303
9.1.1 存储子程序与数据字典 304
9.1.2 局部子程序 306
9.1.3 存储子程序与局部子程序 312
9.2 存储子程序和包的注意事项 313
9.2.1 子程序的依赖关系 313
9.2.2 包的运行时状态 322
9.2.3 权限与存储子程序 327
9.3 存储函数与SQL语句 336
9.3.1 单值函数 336
9.3.2 多值函数 345
9.4 本地编译 348
9.5 在共享池中驻留 348
9.5.1 KEEP过程 349
9.5.2 UNKEEP过程 349
9.5.3 SIZES过程 349
9.5.4 ABORTED_REQUEST
_THRESHOLD过程 350
9.5.5 PL/SQL Wrapper 350
9.6 小结 350
第10章 数据库触发器 351
10.1 触发器的分类 351
10.1.1 DML触发器 352
10.1.2 Instead-of触发器 353
10.1.3 系统触发器 355
10.2 创建触发器 355
10.2.1 创建DML触发器 356
10.2.2 创建Instead-of触发器 365
10.2.3 创建系统触发器 371
10.2.4 触发器的其他一些问题 378
10.2.5 触发器与数据字典 384
10.3 变异表 386
10.3.1 变异表示例 388
10.3.2 变异表错误的工作区 389
10.4 小结 391
第Ⅱ部分 PL/SQL的高级特性
第11章 会话间通信 395
11.1 会话间通信简介 395
11.1.1 需要永久性或临时性的
结构体 396
11.1.2 不需要永久性或临时性的
结构体 396
11.2 DBMS_PIPE内置包 397
11.2.1 DBMS_PIPE包简介 397
11.2.2 DBMS_PIPE包的定义 399
11.2.3 DBMS_PIPE包的使用 403
11.3 DBMS_ALERT内置包 419
11.3.1 DBMS_ALERT包简介 419
11.3.2 DBMS_ALERT包的定义 419
11.3.3 DBMS_ALERT包的使用 421
11.4 小结 427
第12章 外部例程 429
12.1 外部过程简介 429
12.2 外部例程的工作过程 430
12.2.1 定义exproc的结构 430
12.2.2 定义extproc的Oracle Net
Services配置 432
12.2.3 定义多线程的外部过程
代理 439
12.2.4 C语言共享库的工作过程 442
12.2.5 Java共享库的工作过程 448
12.3 解决共享库的错误 454
12.3.1 侦听器或环境的配置 455
12.3.2 共享库或PL/SQL库包装器
的配置 458
12.4 小结 459
第13章 动态SQL 461
13.1 动态SQL简介 462
13.2 本地动态SQL的使用方法 463
13.2.1 不带绑定变量的DDL和
DML语句的使用方法 464
13.2.2 使用DML和已知的绑定变
量列表 472
13.2.3 DQL的使用方法 474
13.3 Oracle的DBMS_SQL内置包
的使用方法 480
13.3.1 不带绑定变量的DDL和
DML语句的使用方法 487
13.3.2 带绑定变量已知列表的
DML语句的使用方法 490
13.3.3 DQL的使用方法 497
13.4 小结 499
第14章 对象概览 501
14.1 面向对象程序设计简介 501
14.2 对象类型概览 502
14.3 创建对象类型 503
14.3.1 对象类型规范 503
14.3.2 对象类型主体 509
14.4 对象类型继承 514
14.5 属性链 523
14.6 更改 526
14.7 小结 531
第15章 数据库中的对象 533
15.1 数据库中对象的简介 533
15.1.1 对象表 534
15.1.2 列对象 540
15.1.3 对象视图 541
15.2 使用SQL和PL/SQL访问持久
对象 543
15.2.1 对象表 543
15.2.2 访问列对象 546
15.2.3 访问对象视图 548
15.2.4 与对象相关的函数和
操作符 550
15.3 维护持久对象 560
15.4 小结 563
第16章 大对象 565
16.1 大对象简介 565
16.1.1 特性比较 566
16.1.2 LOB的种类 567
16.1.3 LOB的结构 569
16.1.4 内部LOB的存储 570
16.1.5 外部LOB的存储 573
16.1.6 临时LOB的存储 574
16.1.7 从LONG到LOB的移植 574
16.2 LOB和SQL 575
16.2.1 操作内部持久LOB的SQL 575
16.2.2 外部LOB--BFILE 579
16.3 LOB和PL/SQL 579
16.3.1 DBMS_LOB 580
16.3.2 APPEND 582
16.3.3 COMPARE 583
16.3.4 CONVERTTOBLOB/
CONVERTOCLOB 585
16.3.5 BFILE_FILEEXISTS 590
16.3.6 BFILE_FILEOPEN/OPEN 592
16.3.7 BFILE_FILEISOPEN
/ISOPEN 593
16.3.8 BFILE_FILECLOSE /CLOSE/
FILECLOSEALL 594
16.3.9 LOADFROMFILE/LOAD-
CLOBFROMFILE/LOAD-
BLOBFROMFILE 597
16.4 执行性能 602
16.4.1 RETURNING子句 602
16.4.2 索引 603
16.5 小结 608
第17章 任务调度 609
17.1 DBMS_JOB简介 610
17.1.1 SUBMIT过程 611
17.1.2 BROKEN过程 614
17.1.3 RUN过程 616
17.1.4 CHANGE过程 617
17.1.5 REMOVE过程 619
17.2 Oracle调度器 619
17.2.1 术语 619
17.2.2 DBMS_SCHEDULER的
使用方法 620
17.2.3 从DBMS_JOB移植 623
17.2.4 删除作业 625
17.3 小结 625
第Ⅲ部分 附 录
附录A PL/SQL的保留字 629
附录B 内置包简介 633