第1篇 PL/SQL开发入门 2
第1章 Oracle 11g数据库系统(教学视频:40分钟) 2
1.1 关系型数据库系统介绍 2
1.1.1 什么是关系型数据模型 3
1.1.2 数据库系统范式 3
1.1.3 关系型数据库管理系统 4
1.1.4 使用SQL语句与数据库管理系统通信 5
1.2 初识Oracle 11g 7
1.2.1 Oracle 11g简介 8
1.2.2 Oracle 11g体系结构 9
1.2.3 如何创建数据库 10
1.2.4 比较Oracle数据库与SQL Server数据库 15
1.3 什么是PL/SQL 16
1.3.1 PL/SQL是一种语言 16
1.3.2 PL/SQL的执行环境 17
1.4 搭建PL/SQL开发环境 18
1.4.1 使用SQL*Plus 18
1.4.2 使用Oracle SQL Developer 22
1.4.3 PL/SQL Developer开发PL/SQL 27
1.4.4 Quest Toad开发PL/SQL 31
1.4.5 使用Oracle文档库 37
1.5 小结 38
第2章 PL/SQL基本概念(教学视频:30分钟) 39
2.1 功能特点 39
2.1.1 结构化程序设计 39
2.1.2 与SQL语言整合 43
2.1.3 面向对象开发 44
2.1.4 模块化应用程序开发 45
2.1.5 提高应用程序性能 46
2.2 语言特性 47
2.2.1 PL/SQL块结构 47
2.2.2 变量和类型 52
2.2.3 程序控制语句 53
2.2.4 过程、函数与包 55
2.2.5 触发器 57
2.2.6 结构化异常处理 60
2.2.7 集合与记录 61
2.2.8 游标 63
2.2.9 动态SQL 64
2.3 编码风格 65
2.3.1 PL/SQL词法单位 65
2.3.2 缩进 70
2.3.3 标识符命名规则 71
2.3.4 大小写风格 71
2.3.5 使用工具格式化代码 72
2.4 小结 73
第3章 变量和类型(教学视频:14分钟) 74
3.1 变量 74
3.1.1 变量的声明 74
3.1.2 变量的赋值 75
3.1.3 使用%TYPE 77
3.1.4 使用%ROWTYPE 77
3.1.5 变量的作用域和可见性 79
3.1.6 常量的定义 81
3.2 数据类型 82
3.2.1 字符类型 82
3.2.2 数字类型 88
3.2.3 日期和时间类型 91
3.2.4 布尔类型 95
3.2.5 LOB对象类型 95
3.2.6 引用类型 96
3.2.7 复合类型 98
3.2.8 用户自定义子类型 98
3.2.9 数据类型转换 100
3.3 运算符和表达式 102
3.3.1 运算符类型 102
3.3.2 运算符的优先级 106
3.3.3 表达式类型 107
3.4 小结 108
第4章 PL/SQL控制语句(教学视频:13分钟) 109
4.1 分支控制语句 109
4.1.1 IF-THEN-ELSE语句 109
4.1.2 IF-THEN-ELSIF语句 113
4.1.3 CASE语句 114
4.1.4 搜索CASE语句 116
4.2 循环控制语句 117
4.2.1 LOOP循环 118
4.2.2 使用EXIT退出循环 118
4.2.3 使用EXIT-WHEN退出循环 119
4.2.4 使用CONTINUE继续执行循环 120
4.2.5 WHILE-LOOP循环 121
4.2.6 FOR-LOOP循环 122
4.2.7 循环语句使用建议 124
4.3 顺序控制语句 125
4.3.1 GOTO语句和标签 125
4.3.2 NULL语句 127
4.4 小结 128
第2篇 PL/SQL开发基础 132
第5章 管理数据表(教学视频:33分钟) 132
5.1 创建表 132
5.1.1 数据定义语言DDL 132
5.1.2 CREATE TABLE语句 134
5.1.3 在设计器中创建表 136
5.1.4 创建表副本 138
5.2 创建约束 138
5.2.1 创建主键约束 139
5.2.2 创建外键约束 140
5.2.3 创建检查约束 144
5.2.4 查看表约束 146
5.3 修改表 148
5.3.1 修改表列 149
5.3.2 修改约束 151
5.3.3 移除数据表 154
5.3.4 在设计器中修改表 154
5.4 索引 156
5.4.1 索引简介 156
5.4.2 索引原理 157
5.4.3 创建索引 158
5.4.4 修改索引 160
5.4.5 删除索引 162
5.5 使用视图 163
5.5.1 视图简介 163
5.5.2 创建视图 164
5.5.3 修改视图 168
5.5.4 删除视图 169
5.6 小结 170
第6章 查询数据表(教学视频:33分钟) 171
6.1 简单查询 171
6.1.1 查询表数据 171
6.1.2 指定查询条件 175
6.1.3 排序 182
6.1.4 使用函数 184
6.1.5 统计函数 186
6.1.6 分组统计 188
6.1.7 HAVING子句 190
6.1.8 使用DUAL表 191
6.1.9 ROWNUM伪列 192
6.1.10 ROWID伪列 193
6.2 复杂查询 195
6.2.1 多表连接查询 195
6.2.2 使用子查询 200
6.2.3 表集合操作 203
6.2.4 层次化查询 207
6.3 小结 210
第7章 操纵数据表(教学视频:27分钟) 211
7.1 插入记录 211
7.1.1 数据操纵语言DML 211
7.1.2 插入单行记录 212
7.1.3 插入默认值和NULL值 213
7.1.4 使用子查询插入多行数据 214
7.1.5 使用INSERT插入多表数据 215
7.2 更新记录 217
7.2.1 更新单行记录 217
7.2.2 使用子查询更新记录 218
7.2.3 使用MERGE合并表行 220
7.3 删除记录 221
7.3.1 删除单行记录 221
7.3.2 使用子查询删除记录 222
7.3.3 使用TRUNCATE清除表数据 223
7.4 提交和回滚记录 224
7.4.1 提交更改 224
7.4.2 回滚更改 225
7.5 使用序列 226
7.5.1 序列简介 226
7.5.2 创建数据序列 227
7.5.3 NEXTVAL和CURRVAL伪列 230
7.5.4 使用数据序列 231
7.5.5 修改序列 232
7.5.6 删除序列 233
7.6 同义词 233
7.6.1 同义词简介 234
7.6.2 创建和使用同义词 234
7.7 小结 235
第8章 记录与集合(教学视频:32分钟) 236
8.1 记录类型 236
8.1.1 记录类型简介 236
8.1.2 定义记录类型 238
8.1.3 记录类型赋值 239
8.1.4 操纵记录类型 243
8.1.5 使用嵌套记录 246
8.2 理解集合类型 247
8.2.1 集合简介 247
8.2.2 定义索引表 248
8.2.3 操纵索引表 249
8.2.4 定义嵌套表 252
8.2.5 操纵嵌套表 253
8.2.6 数据库中的嵌套表 254
8.2.7 定义变长数组 257
8.2.8 操纵变长数组 258
8.2.9 数据库中的变长数组 259
8.2.10 选择集合类型 260
8.3 使用集合方法 261
8.3.1 使用EXISTS方法 262
8.3.2 使用COUNT方法 262
8.3.3 使用LIMIT方法 263
8.3.4 FIRST和LAST方法 264
8.3.5 PRIOR和NEXT方法 264
8.3.6 EXTEND方法 265
8.3.7 TRIM方法 267
8.3.8 DELETE方法 268
8.3.9 集合的异常处理 269
8.3.10 使用批量绑定 270
8.3.11 使用BULK COLLECT 272
8.4 小结 273
第9章 SQL内置函数(教学视频:26分钟) 274
9.1 基本函数 274
9.1.1 字符型函数 274
9.1.2 数字型函数 278
9.1.3 日期时间函数 279
9.1.4 类型转换函数 281
9.1.5 分组函数 286
9.1.6 其他函数 286
9.2 Oracle分析函数 290
9.2.1 什么是分析函数 290
9.2.2 基本语法 292
9.2.3 分析函数结构 293
9.2.4 分析函数列表 297
9.3 分析函数使用示例 301
9.3.1 记录排名 301
9.3.2 首尾记录查询 303
9.3.3 前后排名查询 303
9.3.4 层次查询 304
9.3.5 范围统计查询 305
9.3.6 相邻记录比较 306
9.3.7 抑制重复 306
9.3.8 行列转换查询 307
9.3.9 在PL/SQL中使用分析函数 309
9.4 小结 309
第10章 使用游标(教学视频:20分钟) 310
10.1 游标基本结构 310
10.1.1 游标简介 310
10.1.2 游标分类 312
10.1.3 定义游标类型 313
10.1.4 打开游标 315
10.1.5 使用游标属性 316
10.1.6 提取游标数据 319
10.1.7 批量提取游标数据 320
10.1.8 关闭游标 322
10.2 操纵游标数据 322
10.2.1 LOOP循环 322
10.2.2 WHILE循环 323
10.2.3 游标FOR循环 324
10.2.4 修改游标数据 325
10.3 游标变量 327
10.3.1 游标变量简介 327
10.3.2 声明游标变量类型 328
10.3.3 定义游标变量 328
10.3.4 打开游标变量 329
10.3.5 控制游标变量 330
10.3.6 处理游标变量异常 332
10.3.7 在包中使用游标变量 334
10.3.8 游标变量的限制 335
10.4 小结 336
第11章 事务处理和锁定(教学视频:14分钟) 338
11.1 事务处理简介 338
11.1.1 什么是事务处理 338
11.1.2 使用COMMIT提交事务 340
11.1.3 使用ROLLBACK回滚事务 341
11.1.4 使用SAVEPOINT保存点 342
11.1.5 使用SET TRANSACTION设置事务属性 343
11.2 使用锁定 345
11.2.1 理解锁定 345
11.2.2 记录锁定 347
11.2.3 表锁定 347
11.2.4 使用LOCK TABLE 348
11.3 小结 349
第12章 异常处理机制(教学视频:19分钟) 350
12.1 理解异常处理 350
12.1.1 异常处理简介 350
12.1.2 异常处理语法 353
12.1.3 预定义异常 355
12.2 自定义异常 357
12.2.1 声明异常 358
12.2.2 作用域范围 358
12.2.3 使用EXCEPTION_INIT 360
12.2.4 使用RAISE_APPLICATION_ERROR 361
12.2.5 抛出异常 364
12.2.6 处理异常 364
12.2.7 使用SQLCODE和SQLERRM 366
12.3 异常的传递 367
12.3.1 执行时异常传递 367
12.3.2 声明时异常传递 368
12.3.3 异常处理器中的异常 369
12.3.4 重新抛出异常 370
12.3.5 异常处理准则 371
12.4 小结 376
第3篇 PL/SQL进阶编程 378
第13章 PL/SQL子程序(教学视频:18分钟) 378
13.1 子程序结构 378
13.1.1 子程序简介 378
13.1.2 子程序的优点 379
13.1.3 创建过程 380
13.1.4 创建函数 382
13.1.5 RETURN语句 384
13.1.6 查看和删除子程序 385
13.2 子程序参数 387
13.2.1 形参与实参 388
13.2.2 参数模式 389
13.2.3 形式参数的约束 391
13.2.4 参数传递方式 393
13.2.5 参数默认值 394
13.2.6 使用NOCOPY编译提示 395
13.3 子程序进阶技术 397
13.3.1 在SQL中调用子程序 397
13.3.2 嵌套子程序 398
13.3.3 子程序的前向声明 401
13.3.4 重载子程序 402
13.3.5 子程序自治事务 403
13.3.6 递归调用子程序 405
13.3.7 理解子程序依赖性 407
13.3.8 子程序权限管理 410
13.4 小结 412
第14章 包(教学视频:10分钟) 413
14.1 理解PL/SQL包 413
14.1.1 什么是包 413
14.1.2 包的优点 415
14.1.3 定义包规范 415
14.1.4 定义包体 417
14.1.5 调用包组件 419
14.1.6 编译和调试包 421
14.1.7 查看包的源代码 423
14.2 包的进阶技术 424
14.2.1 包重载 425
14.2.2 包初始化 428
14.2.3 包的纯度级别 430
14.2.4 包权限设置 432
14.2.5 在包中使用游标 433
14.3 管理数据库中的包 435
14.3.1 查看和删除包 435
14.3.2 检查包的依赖性 437
14.4 使用系统包 440
14.4.1 使用DBMS_OUTPUT包 440
14.4.2 使用DBMS_PIPE包 444
14.4.3 使用DBMS_ALTER包 450
14.4.4 使用DBMS_JOB包 453
14.5 小结 458
第15章 触发器(教学视频:23分钟) 459
15.1 理解触发器 459
15.1.1 触发器简介 459
15.1.2 定义触发器 461
15.1.3 触发器的分类 462
15.2 DML触发器 463
15.2.1 触发器的执行顺序 463
15.2.2 定义DML触发器 464
15.2.3 调试触发器 467
15.2.4 使用语句触发器 468
15.2.5 使用OLD和NEW谓词 471
15.2.6 使用REFERENCING子句 473
15.2.7 使用WHEN子句 473
15.2.8 使用条件谓词 474
15.2.9 控制触发顺序 476
15.2.10 触发器限制 477
15.2.11 使用自治事务 478
15.3 替代触发器 480
15.3.1 替代触发器的作用 480
15.3.2 定义替代触发器 481
15.3.3 UPDATE与DELETE替代触发器 483
15.3.4 嵌套表替代触发器 486
15.4 系统事件触发器 488
15.4.1 定义系统触发器 488
15.4.2 触发器事件列表 490
15.4.3 触发器属性列表 492
15.4.4 属性函数使用示例 494
15.4.5 定义SERVERERROR触发器 495
15.4.6 触发器的事务与约束 498
15.5 触发器的管理 498
15.5.1 查看触发器源代码 498
15.5.2 删除和禁用触发器 499
15.5.3 名称与权限的管理 500
15.6 小结 502
第16章 动态SQL语句(教学视频:17分钟) 503
16.1 理解动态SQL语句 503
16.1.1 动态SQL语句基础 503
16.1.2 动态SQL语句使用时机 504
16.1.3 本地动态SQL 506
16.2 使用EXECUTE IMMEDIATE 507
16.2.1 EXECUTE IMMEDIATE语法 507
16.2.2 执行SQL语句和PL/SQL语句块 508
16.2.3 使用绑定变量 510
16.2.4 使用RETURNING INTO子句 512
16.2.5 执行单行查询 513
16.2.6 指定参数模式 513
16.3 多行查询语句 514
16.3.1 使用OPEN-FOR语句 515
16.3.2 使用FETCH语句 516
16.3.3 关闭游标变量 517
16.4 使用批量绑定 518
16.4.1 批量EXECUTE IMMEDIATE语法 518
16.4.2 使用批量FETCH语句 520
16.4.3 使用批量FORALL语句 521
16.5 动态SQL的使用建议 522
16.5.1 用绑定变量改善性能 522
16.5.2 使用重复占位符 523
16.5.3 使用调用者权限 524
16.5.4 传递NULL参数 525
16.5.5 动态SQL异常处理 526
16.6 小结 527
第4篇 PL/SQL高级编程 530
第17章 面向对象编程(教学视频:24分钟) 530
17.1 对象基础 530
17.1.1 面向对象简介 530
17.1.2 什么是对象类型 531
17.1.3 PL/SQL中对象的组成结构 532
17.2 定义对象类型 533
17.2.1 定义对象类型 534
17.2.2 定义对象体 535
17.2.3 定义属性 536
17.2.4 定义方法 538
17.2.5 使用SELF关键字 539
17.2.6 定义构造函数 541
17.2.7 定义MAP和ORDER方法 542
17.2.8 使用对象类型 545
17.2.9 使用嵌套对象类型 547
17.2.10 对象继承 550
17.2.11 方法重载 552
17.3 管理对象表 553
17.3.1 定义对象表 553
17.3.2 插入对象表 554
17.3.3 检索对象表 556
17.3.4 更新对象表 560
17.3.5 删除对象表 561
17.3.6 创建对象列 562
17.3.7 使用对象视图 563
17.4 管理对象类型 565
17.4.1 查看对象类型 565
17.4.2 修改对象类型 567
17.5 小结 569
第18章 PL/SQL性能优化建议(教学视频:14分钟) 570
18.1 了解PL/SQL程序性能 570
18.1.1 影响性能常见原因 570
18.1.2 使用DBMS_PROFILER包 573
18.1.3 使用DBMS_TRACE包 578
18.2 PL/SQL性能优化技巧 583
18.2.1 理解查询执行计划 583
18.2.2 连接查询的表顺序 586
18.2.3 指定WHERE条件顺序 586
18.2.4 避免使用*符号 587
18.2.5 使用DECODE函数 587
18.2.6 使用WHERE而非HAVING 588
18.2.7 使用UNION而非OR 589
18.2.8 使用EXISTS而非IN 590
18.2.9 避免低效的PL/SQL流程控制语句 591
18.2.10 避免隐式类型的转换 592
18.3 小结 593
第5篇 PL/SQL案例实战 596
第19章 企业IC芯片欠料计算程序(教学视频:28分钟) 596
19.1 系统设计 596
19.1.1 程序需求简介 596
19.1.2 数据表ER关系图 597
19.1.3 系统总体流程 599
19.1.4 示例环境的搭建 600
19.2 系统编码实现 601
19.2.1 创建包规范 601
19.2.2 初始化数据 603
19.2.3 获取IC芯片需求量 605
19.2.4 IC物料检查函数 606
19.2.5 获取已走货IC芯片数量 607
19.2.6 获取销售订单数量 608
19.2.7 计算企业IC芯片需求量 608
19.2.8 预备下次计算数据 611
19.2.9 定义调用主程序 614
19.3 调试和部署应用程序 614
19.3.1 编译应用程序 614
19.3.2 调试应用程序 615
19.3.3 查看程序结果 617
19.3.4 部署到生产服务器 618
19.4 小结 619
第20章 PL/SQL邮件发送程序(教学视频:33分钟) 620
20.1 系统设计 620
20.1.1 程序需求简介 620
20.1.2 使用UTL_SMTP发送电子邮件 621
20.1.3 系统总体流程 624
20.1.4 示例环境的搭建 625
20.2 系统编码实现 627
20.2.1 认识MIME类型 627
20.2.2 实现MIME类型邮件发送 628
20.2.3 定义包规范 631
20.2.4 邮件初始化函数xm_init 634
20.2.5 发送并关闭连接xm_close 639
20.2.6 发送HTML邮件 639
20.2.7 发送邮件附件 641
20.2.8 发送Excel附件内容 643
20.2.9 写入工作簿wb_header 645
20.2.10 写入工作表xm_worksheet 646
20.2.11 写入表格行xm_ws_row 647
20.2.12 写入工作表尾信息 648
20.2.13 执行SQL语句写入工作表 650
20.3 编译和部署应用程序 652
20.3.1 编译与调试应用程序 652
20.3.2 验证测试结果 653
20.3.3 部署到生产服务器 655
20.4 小结 655