第1章 简单查询语句 1
1.1 基本查询语句 1
1.1.1 选择数据列 3
1.1.2 列标题和数据的默认显示格式 3
1.1.3 算术表达式 4
1.1.4 列的别名 6
1.1.5 连接操作符 6
1.1.6 原义字符串 7
1.1.7 消除重复行 8
1.1.8 NULL的操作 8
1.2 SQL和SQL*Plus 9
1.2.1 登录到SQL*PLUS 11
1.2.2 显示表结构 12
1.2.3 SQL*PLUS的编辑命令 12
1.2.4 SQL*PLUS的文件命令 14
小结 14
实验1 SQL*PLUS的使用和基本SELECT语句 15
思考练习题 15
第2章 限定查询和排序 17
2.1 限制所选择的数据行 17
2.1.1 比较运算符 18
2.1.2 字符串和日期 19
2.1.3 BETWEEN...AND...运算符 19
2.1.4 IN运算符 20
2.1.5 LIKE运算符 21
2.1.6 空值运算符 22
2.1.7 逻辑运算符 23
2.1.8 运算符优先规则 24
2.2 ORDER BY子句 26
小结 28
实验2 使用WHERE和ORDER BY子句 28
思考练习题 29
第3章 单行函数 30
3.1 SQL函数 30
3.2 单行函数 30
3.3 字符函数 31
3.4 数值函数 33
3.5 日期函数 35
3.5.1 日期的处理 35
3.5.2 RR日期格式 36
3.5.3 日期函数 37
3.6 数据类型的隐式转换 38
3.7 数据类型的显式转换 39
3.7.1 TO CHAR用于日期型 39
3.7.2 TO CHAR用于数值型 42
3.7.3 TO NUMBER 43
3.7.4 TO DATE 44
3.8 通用函数 44
3.8.1 NVL函数 44
3.8.2 DECODE函数 45
3.9 单行函数的嵌套 47
小结 48
实验3 在SELECT语句中使用单行函数 48
思考练习题 49
第4章 多表查询 50
4.1 何谓连接 50
4.2 笛卡尔积 51
4.3 等值连接 52
4.4 连接中使用表的别名 53
4.5 多于两个表的连接 54
4.6 非等值连接 55
4.7 外部连接 56
4.8 自身连接 58
4.9 SQL:1999语法的连接 59
4.9.1 创建交叉连接 59
4.9.2 自然连接 60
4.9.3 使用USING子句创建连接 61
4.9.4 使用ON子句创建连接 62
4.9.5 左外连接 64
4.9.6 右外连接 65
4.9.7 全外连接 65
小结 66
实验4 多表查询 67
思考练习题 68
第5章 组函数和分组统计 69
5.1 组函数 69
5.1.1 AVG和SUM 70
5.1.2 MAX和MIN 70
5.1.3 COUNT 71
5.1.4 组函数中使用NVL函数 72
5.2 用GROUP BY创建数据组 72
5.3 使用组函数的非法查询 75
5.4 HAVING子句的使用 76
5.5 组函数的嵌套 77
小结 77
实验5 组函数和分组统计 78
思考练习题 79
第6章 子查询 80
6.1 子查询 80
6.2 单行子查询 82
6.2.1 WHERE子句中使用单行子查询 82
6.2.2 单行子查询中使用组函数 83
6.2.3 HAVING子句中使用单行子查询 83
6.2.4 含单行子查询的复合查询容易出现的问题 84
6.3 多行子查询 85
6.3.1 使用IN运算符的多行子查询 85
6.3.2 使用ANY运算符的多行子查询 86
6.3.3 使用ALL运算符的多行子查询 87
6.4 多列子查询 87
6.4.1 成对比较多列子查询 88
6.4.2 非成对比较多列子查询 88
6.5 子查询中的空值 89
6.6 FROM子句中使用子查询 90
小结 90
实验6 子查询 91
思考练习题 92
第7章 替代变量和SQL*Plus环境 93
7.1 替代变量 93
7.2 使用&替代变量 94
7.3 字符和日期的替代变量 95
7.4 在运行时刻指定列、表达式及文本 96
7.5 使用&&替代变量 97
7.6 定义用户变量 98
7.6.1 ACCEPT 98
7.6.2 DEFINE和UNDIFINE 100
7.7 定制SQL*Plus环境 101
7.8 SQL*Plus格式化命令 103
7.8.1 COLUMN命令 103
7.8.2 BREAK命令 105
7.8.3 TTITLE和BTITLE 105
7.9 创建格式化报表的脚本文件 105
小结 106
实验7 替代变量的使用 107
思考练习题 108
第8章 数据操作 109
8.1 INSERT语句 109
8.1.1 基本的插入语句 109
8.1.2 插入空值 110
8.1.3 插入特殊值 111
8.1.4 使用替代变量插入值 112
8.1.5 从另一个表中复制数据 112
8.2 UPDATE语句 113
8.2.1 基本的更新语句 113
8.2.2 基于另一个表更新记录 114
8.2.3 更新记录时的完整性约束错误 115
8.3 DELETE语句 116
8.3.1 基本的删除语句 116
8.3.2 基于另一个表删除本表记录 116
8.3.3 删除记录时的完整性约束错误 117
8.4 数据库事务 117
8.4.1 COMMIT、ROLLBACK及SAVEPOINT 118
8.4.2 执行COMMIT、ROLLBACK前后的状态 118
8.4.3 数据回滚 119
8.4.4 读取一致性和锁定 120
小结 121
实验8 操作表中的数据 121
思考练习题 123
第9章 创建和管理表 124
9.1 CREATE TABLE语句的基本用法 124
9.2 用子查询创建表 127
9.3 修改表结构 128
9.4 删除表 129
9.5 修改表的名称 130
9.6 截断表 130
9.7 给表添加注释 131
小结 131
实验9 表的创建和维护 132
思考练习题 133
第10章 约束 134
10.1 定义约束 134
10.2 非空约束 135
10.3 惟一约束 136
10.4 主键约束 138
10.5 外键约束 139
10.6 条件约束 140
10.7 添加和删除约束 141
10.8 禁用和启用约束 142
10.9 查询约束 143
小结 144
实验10 使用约束 144
思考练习题 145
第11章 视图 146
11.1 使用视图的优点 146
11.2 视图的分类 147
11.3 创建视图 147
11.4 查询视图 149
11.5 修改视图 149
11.6 视图上的DML操作 150
11.7 删除视图 152
小结 152
实验11 视图的使用 152
思考练习题 153
第12章 其他数据库对象 154
12.1 序列 154
12.1.1 何谓序列 154
12.1.2 创建序列 155
12.1.3 NEXTVAL和CURRVAL伪列 157
12.1.4 使用SQUENCE(序列) 158
12.1.5 序列的修改和删除 159
12.2 索引 160
12.2.1 何谓索引 160
12.2.2 创建索引 160
12.2.3 删除索引 162
12.3 同义词 162
小结 163
实验12 使用其他数据库对表 164
思考练习题 165
第13章 用户访问控制 166
13.1 用户访问控制及权限 166
13.2 权限分类 167
13.3 创建用户及授予系统权限 168
13.4 角色 169
13.5 对象权限 170
13.6 验证授权 172
13.7 回收权限 173
小结 174
思考练习题 174
第14章 PL/SQL简介 175
14.1 PL/SQL体系结构 175
14.2 PL/SQL块结构 176
第15章 PL/SQL变量 179
15.1 变量的使用和操作 179
15.2 变量类型 180
15.3 声明PL/SQL变量 180
15.4 变量的赋值 182
15.5 标量 183
15.6 %TYPE 184
15.7 其他类型的变量 185
15.7.1 布尔变量 185
15.7.2 复合类型 185
15.7.3 LOB型变量 186
15.7.4 外部变量 186
小结 187
实验13 PL/SQL变量 187
思考练习题 188
第16章 可执行部分 189
16.1 PL/SQL块的语法和原则 189
16.1.1 分隔符 189
16.1.2 标识符 190
16.1.3 字面值 190
16.1.4 注释 190
16.2 SQL和PL/SQL函数 191
16.3 嵌套块和变量的作用域 192
16.4 PL/SQL中的运算符 194
16.5 PL/SQL的编程准则 194
小结 196
实验14 编写PL/SQL块 196
思考练习题 197
第17章 PL/SQL中的SQL语句 199
17.1 PL/SQL中的SELECT语句 199
17.2 PL/SQL中DML语句 202
17.2.1 插入数据 202
17.2.2 更新数据 202
17.2.3 删除数据 203
17.2.4 标识符命名 203
17.3 COMMIT和ROLLBACK 204
17.4 SQL游标 205
小结 206
实验15 PL/SQL中的SQL语句 206
思考练习题 208
第18章 控制结构 209
18.1 条件控制 209
18.1.1 IF-THEN语句 210
18.1.2 IF-THEN-ELSE语句 210
18.1.3 IF-THEN-ELSIF语句 211
18.1.4 CASE语句 212
18.1.5 构造逻辑条件 214
18.2 循环控制 215
18.2.1 Basic Loop 215
18.2.2 FOR Loop 216
18.2.3 WHILE Loop 217
18.2.4 循环嵌套和循环标记 218
小结 219
实验16 控制结构 219
思考练习题 220
第19章 复合数据类型 221
19.1 PL/SQL记录 221
19.1.1 创建PL/SQL记录 222
19.1.2 为PL/SQL记录赋值 223
19.1.3 %ROWTYPE 223
19.1.4 嵌套记录 224
19.2 索引表 225
19.2.1 创建索引表 225
19.2.2 含有RECORD的索引表 227
19.2.3 索引表所提供的方法 227
小结 228
实验17 复合数据类型的使用 229
思考练习题 229
第20章 游标 230
20.1 显式游标 230
20.1.1 声明游标 231
20.1.2 打开游标 233
20.1.3 从游标中提取数据 233
20.1.4 关闭游标 235
20.2 显式游标的属性 236
20.3 游标式的FOR循环 237
20.4 参数化的游标 238
20.5 SELECT FOR UPDATE游标 240
20.5.1 FOR UPDATE 240
20.5.2 WHERE CURRENT OF 241
20.6 隐式游标 242
小结 243
实验18 游标的使用 243
思考练习题 244
第21章 异常 245
21.1 何谓异常 245
21.2 预定义异常 247
21.3 PL/SQL的异常处理结构 250
21.3.1 异常的触发 250
21.3.2 异常的传播 250
21.4 用户定义异常 253
21.4.1 声明异常 253
21.4.2 触发自定义异常 254
21.4.3 异常处理程序 254
21.4.4 使用EXCEPTION_INT 254
21.4.5 使用错误函数SQLCODE和SQLERRM 255
21.4.6 使用RAISE_APPLICATION_ERROR 256
小结 257
实验19 异常的使用 257
思考练习题 259
第22章 创建子程序和包 260
22.1 过程和函数 260
22.1.1 创建子程序 262
22.1.2 删除过程和函数 266
22.1.3 子程序参数 266
22.1.4 过程与函数的比较 284
22.2 包 285
22.2.1 包的说明 285
22.2.2 包体 287
22.2.3 包和作用域 289
22.2.4 重载封装子程序 291
22.2.5 包的初始化 293
小结 295
实验20 子程序和包的创建 296
思考练习题 298
第23章 使用子程序和包 300
23.1 子程序位置 300
23.1.1 存储子程序和数据字典 300
23.1.2 局部子程序 303
23.1.3 存储子程序和局部子程序的比较 308
23.2 存储子程序和包的注意事项 309
23.2.1 子程序的依赖性 309
23.2.2 包运行时状态 316
23.2.3 特权和存储子程序 321
23.3 在SQL语句中使用存储函数 329
23.3.1 纯度等级 330
23.3.2 默认参数 336
23.3.3 从Oracle8i中从SQL语句调用函数 336
23.4 包的辅助功能 339
23.4.1 共享池锁定 340
23.4.2 包体长度的限制 341
23.4.3 优化参数 342
小结 344
实验21 子程序和包的使用 345
思考练习题 346
第24章 数据库触发器 347
24.1 触发器的类型 347
24.1.1 DML触发器 348
24.1.2 instead-of触发器 349
24.1.3 系统触发器 350
24.2 创建触发器 350
24.2.1 创建DML触发器 351
24.2.2 创建instead-of触发器 360
24.2.3 创建系统触发器 362
24.2.4 其他触发器问题 368
24.2.5 触发器与数据字典 371
24.3 变异表 372
24.3.1 变异表的例子 373
24.3.2 变异表错误的解决 374
小结 377
实验22 数据库触发器的使用 377
思考练习题 378
第25章 实用工具包 380
25.1 DBMS_OUTPUT包与输入输出 380
25.1.1 PUT和PUT_LINE过程调用语法 380
25.1.2 GET_LINE和GET_LINES调用语法 381
25.1.3 ENABLE和DISABLE语法 381
25.2 UTL_FILE包与文件输入输出 384
25.2.1 安全 384
25.2.2 UTL_FILE引发的异常 386
25.2.3 打开和关闭文件 387
25.2.4 文件输出 388
25.2.5 文件输入 391
25.2.6 文件操作举例 392
25.3 DBMS_SQL包与动态SQL语句 398
25.3.1 静态与动态SQL 398
25.3.2 动态DML语句 398
25.3.3 动态DDL语句 402
25.3.4 DBMS_SQL包的语法说明 403
25.4 DBMS_JOB包与数据库作业 411
25.4.1 后台进程 411
25.4.2 运行作业 412
25.4.3 其他的DBMS_JOB子程序 417
25.4.4 在数据库视图中观察作业 421
25.4.5 作业运行环境 421
小结 421
实验23 常用工具包的使用 422
思考练习题 423
第26章 大型对象 424
26.1 大型对象概述 424
26.1.1 什么是大型对象 424
26.1.2 大型对象数据类型 425
26.1.3 大型对象的值和定位器 426
26.1.4 目录(DIRECTORY) 428
26.2 PL/SQL的DBMS_LOB包的使用 428
26.2.1 DBMS_LOB包的函数/过程介绍 429
26.2.2 DBMS_LOB包的大型对象定位器 430
26.2.3 DBMS_LOB的数据类型、常数及异常 430
26.2.4 DBMS_LOB包的使用规则 431
26.3 对BFILE的操作 432
26.3.1 创建目录对象 432
26.3.2 函数BFILENAME 433
26.3.3 打开BFILE 433
26.3.4 函数FILEISOPEN 434
26.3.5 函数FILEEXISTS 435
26.3.6 关闭文件的过程 435
26.3.7 获取文件信息 436
26.3.8 读取文件 437
26.3.9 比较两个文件的内容 438
26.3.10 INSTR函数 439
26.3.11 SUBSTR函数 439
26.3.12 使用外部大型对象BFILE的举例 440
26.4 使用内部大型对象 441
26.4.1 使用内部大型对象前的准备 441
26.4.2 APPEND过程 442
26.4.3 COMPARE函数 442
26.4.4 COPY过程 444
26.4.5 ERASE过程 445
26.4.6 GETLENGTH函数 446
26.4.7 INSTR函数 446
26.4.8 READ过程 447
26.4.9 SUBSTR函数 448
26.4.10 TRIM过程 449
26.4.11 WRITE过程 450
26.4.12 WRITEAPPEND过程 450
26.4.13 使用内部大型对象举例 451
26.5 临时大型对象 456
26.5.1 临时大型对象概述 456
26.5.2 临时大型对象的使用 457
26.6 LONG与LOB数据类型的转换 459
26.6.1 LONG与LOB数据类型的比较 459
26.6.2 LONG与LOB数据类型的转换 460
小结 461
实验24 大型对象的使用 461
思考练习题 462
ORACLE认证课程介绍 463