第1章 PL/SQL简介 1
1.1 理解PL/SQL 1
1.2 PL/SQL体系结构 3
1.3 理解PL/SQL引擎 5
1.3.1 客户端PL/SQL含义 5
1.3.2 服务器端PL/SQL 6
1.3.3 适合客户/服务器环境 6
1.3.4 适合客户环境 9
1.3.5 对比服务器端与客户端开发 9
1.4 在工具箱里添加PL/SQL 10
1.4.1 加强SQL脚本 10
1.4.2 简化数据库管理 10
1.4.3 以较少的争论得到较好的信息 10
1.4.4 设计更好的数据库应用 11
1.5 学习PL/SQL前的准备 11
1.5.1 理解事情的模式 12
1.5.2 基本PL/SQL开发环境 13
1.5.3 存取数据字典 14
1.6 Oracle 8i专有的功能 15
1.6.1 本地动态SQL 15
1.6.2 成批捆绑 16
1.7 本章小结 16
第2章 PL/SQL基础 17
2.1 编码规定 18
2.2 词法单位 18
2.2.1 标识符 19
2.2.2 文字 20
2.2.3 注释 21
2.2.4 特殊字符 22
2.3 命名习惯和标识符的作用域 23
2.3.1 命名习惯 24
2.3.2 标识符的作用域 24
2.4 表达式 25
2.5 数据类型 27
2.6 数据类型转换 28
2.6.1 显式转换 28
2.6.2 隐式转换 29
2.7 声明变量 29
2.7.1 常量和变量 29
2.7.2 声明语法 31
2.7.3 变量初始化 31
2.8 用户定义记录 31
2.8.1 说明记录 31
2.8.2 引用记录 33
2.8.3 嵌套的记录 34
2.8.4 记录赋值 34
2.8.5 使用%ROWTYPE 35
2.9 PL/SQL表 36
2.9.1 PL/SQL表的说明 36
2.9.2 PL/SQL表的引用 38
2.9.3 表属性 39
2.9.4 使用PL/SQL表的指南 43
2.10 PL/SQL的风格指南 44
2.10.1 注释风格 44
2.10.2 变量名风格 45
2.10.3 大写风格 45
2.10.4 缩进风格 45
2.10.5 常见风格 45
2.11 程序实例 46
2.12 本章小结 49
第3章 控制结构 50
3.1 程序控制 50
3.2 if逻辑结构 51
3.2.1 IF-THEN 51
3.2.2 IF-THEN-ELSE 52
3.2.3 IF-THEN-ELSIF 53
3.3 循环 55
3.3.1 基本循环 56
3.3.2 LOOP-EXIT WHEN-END循环 57
3.3.3 WHILE-LOOP-END循环 58
3.3.4 数值FOR_LOOP循环 58
3.3.5 LOOP lables 59
3.4 本章小结 60
第4章 在PL/SQL中使用SQL 61
4.1 SQL语句简介 61
4.2 对表的操作 62
4.2.1 表的创建 62
4.2.2 对表插入数据 63
4.2.3 修改表中的数据 64
4.2.4 删除表中的数据 65
4.2.5 作业的提交 65
4.3 基本查询(Basic Query) 66
4.3.1 查询语句 66
4.3.2 组函数的使用 67
4.3.3 BETWEEN,IN,LIKE的使用 67
4.3.4 排序显示 68
4.3.5 分组查询 68
4.3.6 查询的并、交、差操作 69
4.4 连接查询 70
4.4.1 连接的基本方法 70
4.4.2 二元连接查询 71
4.4.3 多元连接查询 71
4.4.4 自身连接查询 72
4.4.5 外部连接查询 72
4.5 嵌套与树结构查询 73
4.5.1 单层嵌套查询 73
4.5.2 多层嵌套查询 74
4.5.3 ANY、ALL、EXISTS的使用 75
4.5.4 相关嵌套查询 76
4.5.5 树结构查询 77
4.6 数据显示 79
4.6.1 数值显示 79
4.6.2 字符值显示 81
4.6.3 日期显示 83
4.6.4 空值显示 86
4.7 视图的建立及使用 87
4.7.1 视图的慨念 87
4.7.2 视图的基本操作 87
4.7.3 多表视图 88
4.8 数据定义和授权 89
4.8.1 别名与重命名 89
4.8.2 表结构的修改 90
4.8.3 表与视图的复制和删除 90
4.8.4 索引 91
4.8.5 使用权的授予及收回 92
4.9 在PL/SQL中使用SQL 93
4.9.1 使用DDL 94
4.9.2 在PL/SQL中使用DML 94
4.10 本章小结 95
第5章 游标 96
5.1 显式游标 96
5.1.1 游标说明 97
5.1.2 游标属性 99
5.1.3 打开游标 101
5.1.4 取活动集的行 102
5.1.5 关闭游标 104
5.2 隐式游标 106
5.2.1 包内的游标 108
5.2.2 游标FOR循环 109
5.3 用何种游标 112
5.4 本章小结 112
第6章 子程序(过程和函数) 113
6.1 什么是子程序 113
6.2 过程 114
6.2.1 创建过程 114
6.2.2 参数和模式 116
6.2.3 过程主体 119
6.2.4 对形式参数的约束 119
6.2.5 位置标识法和带名标识法 121
6.2.6 参数缺省值 128
6.3 函数 129
6.3.1 创建函数 129
6.3.2 RETURN语句 131
6.3.3 函数样式 132
6.4 重载 133
6.5 递归 134
6.6 子程序中的异常处理 134
6.7 子程序位置 136
6.7.1 内置子程序 136
6.7.2 本地子程序 137
6.7.3 前向声明 139
6.8 存储子程序 140
6.8.1 创建存储子程序 140
6.8.2 从SQL调用存储子过程 144
6.8.3 从PL/SQL调用存储子过程 146
6.9 本章小结 147
第7章 包 148
7.1 包 148
7.1.1 包的组成 148
7.1.2 包的优点 150
7.1.3 包规范和包体 150
7.1.4 重载 159
7.1.5 包初始化 161
7.1.6 包的状态和相依性 163
7.1.7 STANDARD包和产品特有的包 165
7.2 在SQL语句中使用内置函数 166
7.2.1 纯度级别 166
7.2.2 RESTRICT_REFERENCES 167
7.2.3 缺省参数 169
7.3 使用PL/SQL数据模式输出程序 170
7.4 对包装子程序的调用 182
7.5 Oracle 8i数据库提供的包 183
7.5.1 在服务器内交互 183
7.5.2 在服务器以外交互 183
7.5.3 从服务器获取更多的信息 183
7.5.4 描述提供的包 183
7.6 使用Oracle 8i提供的包 184
7.6.1 使用DBMS_APPLICATION_INFO监控 184
7.6.2 使用DBMS_DDL重新编译包 186
7.6.3 使用DBMS_OUTPUT格式化输出 190
7.7 本章小结 191
第8章 错误处理 192
8.1 概述 192
8.1.1 用户定义的异常 193
8.1.2 预定义的异常 195
8.1.3 EXCEPTION_INIT Pragma 196
8.1.4 使用RAISE_APPLICATION_ERROR 197
8.2 异常的传播 199
8.2.1 在执行部分引发的异常情态 200
8.2.2 在声明部分引发的异常情态 200
8.2.3 在异常处理部分引发的异常情态 200
8.3 重新引发异常 201
8.4 异常处理 203
8.5 使用PL/SOL(常用错误处理模块) 208
8.6 本章小结 218
第9章 在Oracle中使用对象编程 219
9.1 面向对象的基础知识 219
9.2 在Oracle 8i中使用对象 220
9.2.1 定义一个对象类型 220
9.2.2 实例化使用对象 222
9.2.3 存储和检索对象 222
9.3 使用对象表 224
9.3.1 将对象存储在对象表中 224
9.3.2 检索和更新对象表中的对象 225
9.3.3 使用VALUE操作符检索对象表 225
9.3.4 更新对象表 225
9.3.5 删除对象表中的对象 226
9.4 对象引用 227
9.4.1 REF和DEREF操作符 227
9.4.2 讨论SELF参数 228
9.5 比较对象 228
9.6 本章小结 228
第10章 调试代码并防止错误 229
10.1 定位并消除语法错误 229
10.1.1 识别语法错误 229
10.1.2 一个识别语法错误的范例 231
10.1.3 防止语法错误 233
10.2 处理逻辑错 233
10.2.1 操作次序 234
10.2.2 逻辑错误的排除方法 234
10.3 使用工具帮助调试程序 237
10.3.1 将DBMS_OUTPUT用作调试工具 237
10.3.2 编写DEBUG包 237
10.4 防止错误并规划以后的调试 238
10.4.1 定义需求和规划项目 238
10.4.2 使用模块化方法编码 239
10.4.3 注释代码 239
10.4.4 在代码中编写错误处理响应 239
10.4.5 格式化代码 239
10.5 本章小结 240
第11章 使用大型对象类型 242
11.1 什么是LOB 242
11.1.1 LOB的局限性 243
11.1.2 LOB和LONG数据类型的比较 244
11.1.3 将LONG转换为LOB 244
11.1.4 使用LOB创建表 244
11.1.5 LOB存储管理 245
11.2 BFILE 245
11.3 使用LOB和BFILE的例子 247
11.4 DBMS_LOB包 248
11.5 更多的一些例子 257
11.6 临时LOB 260
11.6.1 管理临时LOB 260
11.6.2 创建临时LOB 260
11.7 最后的一些问题 261
11.8 本章小结 261
第12章 管理事物和锁定 262
12.1 事务类型 262
12.2 开始事务 263
12.3 结束事务 263
12.4 撤销事务 264
12.5 两步提交 265
12.6 使用保存点创建书签 265
12.7 使用RELEASE选项 266
12.8 使用锁定 266
12.8.1 锁定表 267
12.8.2 锁定记录 267
12.8.3 显式锁定 268
12.8.4 DBMSLOCK包 268
12.9 本章小结 271
第13章 高级队列 272
13.1 什么是AQ 272
13.2 高级队列管理 273
13.2.1 配置服务器 273
13.2.2 谈谈方案 274
13.2.3 创建一个队列表 274
13.2.4 创建队列 276
13.2.5 启动和关闭队列 277
13.2.6 删除队列 279
13.2.7 修改队列 280
13.3 队列操作 281
13.3.1 将消息放入队列 281
13.3.2 将消息放入列表 283
13.3.3 从队列中检索消息 284
13.3.4 把消息从队列中取出 285
13.3.5 实例 285
13.4 队列权限 290
13.4.1 AQ_ADMINSTRATOR_ROLE 290
13.4.2 AQ_USER_ROLE 290
13.4.3 访问AQ对象类型 290
13.5 本章小结 290
第14章 数据库作业和文件I/O 291
14.1 数据库作业 291
14.1.1 后台进程 291
14.1.2 运行作业 292
14.1.3 失效作业(Broken Jobs) 296
14.1.4 删除作业 296
14.1.5 修改作业 296
14.1.6 查看数据字典中的作业 297
14.1.7 作业执行环境 297
14.2 文件I/O 297
14.2.1 安全性 297
14.2.2 由UTL_FILE所引发的异常情态 299
14.2.3 打开和关闭文件 299
14.2.4 文件输出 301
14.2.5 文件输入 303
14.2.6 实例 304
14.3 本章小结 311
附录 内置SQL函数 312
F.1 字符函数——返回字符值 313
F.2 字符函数——返回数字 315
F.3 数字函数 317
F.4 日期函数 319
F.5 转换函数 321
F.6 分组函数 323
F.7 其他函数 325