第一章 现实世界的数据库自动化 1
1.1 脚本化 1
1.1.1 备份与恢复 1
1.1.2 创建和维护用户 4
1.1.3 生成动态代码 4
1.1.4 测试 7
1.1.5 其他用途 8
1.2 存储PL/SQL对象 9
1.2.1 过程 9
1.2.2 函数 11
1.2.3 包 12
1.2.4 数据库触发器(Database Trigger) 14
1.3 数据库自动化的未来 16
1.3.1 业务规则引擎(Engine) 17
1.4 小结 17
2.1.1 约束 18
2.1 Oracle数据库的体系结构 18
第二章 ORACLE数据库的体系结构、SQL与PL/SQL 18
2.1.2 创建索引 22
2.1.3 特权与角色 23
2.1.4 模式 24
2.1.5 顺序机制 25
2.1.6 快照 25
2.1.7 同义字 25
2.1.8 表与列 26
2.1.9 视图 26
2.1.10 系统全局区域 26
2.2 什么是SQL 28
2.2.1 数据定义语言 28
2.2.2 数据操作语言 29
2.2.3 提交与回退(rollback) 29
2.2.4 数据类型 29
2.2.5 连接 31
2.2.7 锁 32
2.2.6 表别名 32
2.2.8 空值(NULL VALUE) 33
2.2.9 操作符 33
2.2.10 子查询 34
2.3 PL/SQL总览 34
2.3.1 块 35
2.3.2 游标(Cursor) 36
2.3.3 数据类型 37
2.3.4 异常与异常处理 41
2.3.5 IF-THEN-ELSE逻辑 44
2.3.6 NULL语句 44
2.3.7 循环结构 44
2.4 小结 45
2.3.8 存储对象 46
2.3.9 PL/SQL愿望表 51
2.3.10 数据库怎样解析SQL与PL/SQL 52
3.1 脚本面面观 55
第三章 SQL与PL/SQL脚本化 55
3.1.1 备份与恢复 56
3.1.2 动态生成代码 56
3.1.3 安全与用户管理 57
3.1.4 报表 59
3.1.5 测试 60
3.1.6 其他任务 64
3.1.7 对脚本进行归档 65
3.2.1 SQL*Plus命令 67
3.2 SQL*Plus中的脚本 67
3.2.2 连接到SQL*Plus 76
3.2.3 退出SQL*Plus 76
3.2.4 脚本参数 77
3.2.5 成卷输出到文件 77
3.2.6 替代变量 77
3.3 脚本中的PL/SQL 78
3.3.1 匿名PL/SQL块 78
3.3.2 使用DBMS_Output和UTL_File 78
3.4.2 伪代码 79
3.4.3 代码 79
3.4 循序渐进:在SQL*Plus中建立报表 79
3.4.1 需求 79
3.5 小结 80
第四章 过程 82
4.1 过程的优点 82
4.1.1 嵌入式SQL 82
4.1.2 可维护性 82
4.1.3 模块化 82
4.1.4 提高性能 83
4.2 创建与删除(drop)过程 84
4.1.5 可重用性 84
4.2.1 重编译过程 85
4.2.2 局部过程 85
4.3 依赖性 88
4.4 参数 89
4.4.1 数据类型 89
4.4.2 参数类型 90
4.4.3 省缺值 90
4.5.1 匿名PL/SQL块 91
4.5 调用过程 91
4.5.2 存储PL/SQL对象 92
4.5.3 表示法 94
4.6 过程的结构 95
4.6.1 过程声明 95
4.6.2 变量声明 97
4.6.3 可执行声明 98
4.6.4 过程体 100
4.6.5 异常处理器 101
4.7 归档过程 106
4.7.1 标头 107
4.7.2 伪代码 108
4.7.3 注释 109
4.7.4 标识符 110
4.8 循序渐进:设计一个过程 110
4.8.1 过程要求 110
4.8.2 设计 111
4.8.3 伪代码 111
4.8.4 编码 112
4.8.5 测试过程 116
4.9 小结 118
第五章 函数 119
5.1 函数的优点 119
5.1.1 嵌入式SQL 119
5.1.2 可维护性 119
5.1.3 模块化 120
5.1.4 提高性能 120
5.2 创建与删除函数 121
5.1.5 可靠性 121
5.2.1 局部函数 122
5.3 依赖性 124
5.4 参数 125
5.4.1 数据类型 125
5.5 返回值 126
5.5.1 数据类型 126
5.6 调用函数 128
5.6.1 DML语句 128
5.6.3 存储LP/SQL对象 129
5.6.2 匿名PL/SQL块 129
5.7 函数的结构 130
5.7.1 函数声明 130
5.7.2 变量声明 132
5.7.3 可执行声明 134
5.7.4 函数体 136
5.7.5 异常处理 138
5.8 归档函数 139
5.8.1 标头 140
5.8.2 伪代码 141
5.8.3 注释 142
5.8.4 标识符 142
5.9 循序渐进:创建一个函数 143
5.9.1 函数要求 143
5.9.2 设计函数 144
5.9.3 伪代码 144
5.9.4 编码 145
5.9.5 测试 150
5.10 小结 154
第六章 包 155
6.1 包说明 155
6.1.1 全局变量 155
6.1.2 过程 158
6.1.3 函数 159
6.1.4 重载过程与函数 161
6.2 包体 162
6.2.1 过程 163
6.2.2 函数 164
6.2.3 初始化包 166
6.3 循序渐进:建立包 166
6.3.1 要求 166
6.3.2 伪代码 168
6.3.3 编码 169
6.3.4 测试 173
6.4 小结 174
7.1.1 嵌入式DML语句 175
7.1 数据库触发器的特征 175
第七章 数据库触发器 175
7.1.2 事件驱动进程 176
7.1.3 可维护性 179
7.1.4 提高性能 179
7.1.5 引用列值 179
7.1.6 可重用性 179
7.1.7 :old与:new定义 179
7.1.8 布尔函数 179
7.2 创建和删除触发器 181
7.2.1 重编译数据库触发器 182
7.2.2 禁止和允许触发器 182
7.3 互斥表错误 183
7.3.1 引用与触发器相关的表 183
7.3.2 外来关键字的引用 185
7.3.3 重叠删除 186
7.3.4 围绕规则工作 186
7.5 触发器的典型应用 189
7.5.1 实施复杂业务规则 189
7.4 数据字典和触发器源代码 189
7.5.2 更新相关数据 190
7.5.3 为处理而标记行 190
7.5.4 通知事件 190
7.6 触发器结构 190
7.6.1 触发器声明 190
7.6.2 触发事件 191
7.6.3 相关表 192
7.6.5 WHEN子句 193
7.6.4 触发器级别 193
7.6.6 触发器体 194
7.7 归档触发器 195
7.7.1 触发器标头 195
7.8 循序渐进:创建一个触发器 196
7.8.1 触发器的要求 196
7.8.2 决定触发器的级别 197
7.8.3 伪代码 197
7.8.4 编码 198
7.8.5 测试触发器 199
7.9 小结 200
第八章 调试 201
8.1 编译错误 201
8.1.1 列出编译错误 201
8.1.2 修改编译错误 203
8.1.3 使用数据字典表 204
8.1.4 行号 205
8.1.5 当行号不正确时 206
8.2.1 使用DBMS_Output包 207
8.2 运行错误 207
8.2.2 定位运行错误 211
8.2.3 在执行过程中干净地处理异常 213
8.2.4 有用的函数 217
8.3 小结 218
第九章 特殊包 219
9.1 DBMS_Alert 219
9.1.5 Signal()过程 220
9.1.4 Set_Defaults()过程 220
9.1.3 RemoveAll()过程 220
9.1.2 Remove()过程 220
9.1.1 Register()过程 220
9.1.6 WaitAny()过程 221
9.1.7 WaitOne()过程 222
9.1.8 使用信号 222
9.2 DBMS_DDL 223
9.2.1 Alter_Compile()过程 224
9.2.2 Analyze_Object()过程 224
9.3 DBMS_Describe 225
9.4 DBMS_Job 226
9.4.1 Broken()过程 227
9.4.2 Change()过程 227
9.4.3 Interval()过程 227
9.4.4 ISubmit()过程 228
9.4.5 Next_Data()过程 228
9.4.6 Remove()过程 228
9.4.7 Run()过程 228
9.4.11 安排一个工作 229
9.4.10 What()过程 229
9.4.8 Submit()过程 229
9.4.9 User_Export()过程 229
9.5 DBMS_Output 230
9.6 DBMS_Pipe 230
9.6.1 Create_Pipe()函数 231
9.6.2 Next_Item_Type()函数 232
9.6.3 Pack_Message()过程 232
9.6.4 Purge()过程 233
9.6.5 Receive_Message()函数 233
9.6.6 Remove_Pipe()函数 233
9.6.7 Send_Message()函数 234
9.6.8 Unique_Session_Name()函数 234
9.6.9 Unpack_Message()过程 234
9.6.10 应用管道 235
9.7 DBMS_SQL 236
9.7.1 Bind_Variable()过程 237
9.7.3 Column_Value()过程 238
9.7.2 Close_Cursor()过程 238
9.7.4 Define_Column()过程 240
9.7.5 Execute()函数 240
9.7.6 Execute_And_Fetch()函数 241
9.7.7 Fetch_Rows()函数 241
9.7.8 Open_Cursor()函数 241
9.7.9 Parse()过程 241
9.7.10 Variable_Value()过程 242
9.7.11 DBMS_SQL包的应用 243
9.8 DBMS_Utility 244
9.9 UTL_File 244
9.9.1 Fclose()过程 245
9.9.2 FClose_All()过程 245
9.9.3 FFlush()过程 245
9.9.4 FOpen()函数 245
9.9.7 New_Line()过程 246
9.9.8 Put()过程 246
9.9.6 Is_Open()函数 246
9.9.5 Get_Line()函数 246
9.9.9 PutF()过程 247
9.9.10 Put_Line()过程 247
9.9.11 UTL_FILE包的应用 247
9.10 小结 248
第十章 性能调整 249
10.1 SQL的性能调整 249
10.1.1 EXPLAIN PLAN语句的应用 249
10.1.2 应用TKPROF 251
10.1.3 其他调整性能的提示 255
10.2 调整PL/SQL性能 257
10.2.1 使用游标 257
10.2.2 异常处理 258
10.3 小结 261
附录A 使用内嵌的SQL和PL/SQL函数 262
附录B DML命令语法和释例 280
附录C 与其他ORACLE专业人员联系 283
附录D SQL和PL/SQL编程标准 286
附录E ORACLE8中有些什么新内容 305