对于Oracle技术人员而言,怎么强调掌握PL/SQL的重要性都不过分。但是,真正精通PL/SQL绝非易事。事实上,在现有的Oracle应用程序中充斥着太多质量不佳的PL/SQL代码,它们要么没有充分利用Oracle特有的功能,要么是在误用或者滥用。这种现象导致了许多对PL/SQL本身能力不公正的批评。
精通Oracle PL/SQL 由全球Oracle技术专家组织OakTable Network的多位大师联手编写,是为PL/SQL正名的名著。与市面上许多PL/SQL图书只是纸上谈兵、局限于语法和功能本身不同,本书从实战出发,讲述如何正确、充分地运用语言特性,除了PL/SQL的基本功能之外,也包括数据的高效处理、安全、触发器、高效的调试技术等。作者在讲解每一个特性 时都辅以经过实战检验的示例,更与读者分享了大量多年积累的独家经验。有本书在手,你将学会如何充分发挥PL/SQL的巨大潜能,编写出可靠、高效且易于 维护的一流程序。
目录
- 第1章 高效能的PL/SQL
- 1.1 为何使用PL/SQL
- 1.1.1 PL/SQL贴近数据
- 1.1.2 最简单的通常是最好的
- 1.2 什么是高效能的PL/SQL
- 1.2.1 性能
- 1.2.2 影响
- 1.2.3 可论证性
- 1.3 达到高效能
- 1.3.1 绑定变量和解析的代价
- 1.3.2 使用PL/SQL的可用特性
- 1.3.3 不要使用PL/SQL来做SQL的工作
- 1.4 小结
- 第2章 全部打包
- 2.1 包的基本好处
- 2.1.1 包的重载
- 2.1.2 包中的公有变量和私有变量
- 2.1.3 初始化
- 2.1.4 信息隐藏
- 2.2 独立的过程和依赖危机
- 2.3 打破依赖链
- 2.4 使用递归
- 2.5 人们为何避而不用包
- 2.5.1 忽视分离的好处
- 2.5.2 这是个包,不是库
- 2.6 何时不能使用包
- 2.7 发布包
- 2.7.1 路径跟踪编程变得简单
- 2.7.2 其他有用的例程
- 2.7.3 检索DDL
- 2.7.4 DBMS_ROWID的有趣应用
- 2.7.5 后台任务
- 2.8 小结
- 第3章 令人困惑的游标
- 3.1 显式游标与隐式游标
- 3.1.1 单行的读取
- 3.1.2 多行处理
- 3.1.3 TOP-N处理
- 3.1.4 结论
- 3.2 跨架构的游标管理
- 3.2.1 游标变量
- 3.2.2 游标表达式
- 3.3 小结
- 第4章 高效数据处理
- 4.1 控制数据类型
- 4.1.1 使用%TYPE属性
- 4.1.2 使用包集中控制数据类型
- 4.1.3 避免隐式数据类型转换
- 4.2 从字段到行——使用%ROWTYPE
- 4.3 从记录到对象
- 4.3.1 对象类型
- 4.3.2 用集合扩展runstats
- 4.4 在PL/SQL中使用集合的动机
- 4.5 用集合来批处理
- 4.5.1 批收集
- 4.5.2 批量绑定
- 4.6 在PL/SQL程序间传递变量
- 4.6.1 将%TYPE和%ROWTYPE作为参数传递
- 4.6.2 将集合作为参数传递
- 4.7 PL/SQL中的事务处理
- 4.8 自治事务
- 4.8.1 在触发器中避免变异表错误
- 4.8.2 作为事务的一部分执行DDL
- 4.8.3 审计SELECT语句
- 4.8.4 回滚后保持审计
- 4.9 小结
- 第5章 PL/SQL优化技巧
- 5.1 尽量减少解析和内存消耗
- 5.1.1 触发器内的代码
- 5.1.2 调用者权限过程
- 5.1.3 解放思想:使用管道函数
- 5.2 数据类型:提示和技巧
- 5.2.1 关联数组
- 5.2.2 集合
- 5.2.3 使用基于记录的DML时的问题
- 5.3 调用PL/SQL
- 5.3.1 使用PL/SQL来显露数据模型,而不是扩展它
- 5.3.2 动态调用PL/SQL
- 5.4 PL/SQL中的SQL
- 5.4.1 SQL函数和递归SQL
- 5.4.2 高效的动态SQL
- 5.5 小结
- 第6章 触发器
- 6.1 触发器概念
- 6.1.1 触发器类型
- 6.1.2 事件属性
- 6.1.3 触发器计时
- 6.1.4 多个相似的触发器
- 6.1.5 DML行前与行后触发器的性能
- 6.1.6 权限
- 6.1.7 触发器和数据字典
- 6.1.8 触发器依赖性
- 6.1.9 触发器状态
- 6.1.10 触发器失败
- 6.1.11 触发器的局限性
- 6.2 DML触发器
- 6.2.1 存储审计信息
- 6.2.2 实现转变约束
- 6.2.3 生成代理键
- 6.3 替代触发器
- 6.4 变异表
- 6.4.1 延时处理方案
- 6.4.2 变异表和自治事务
- 6.4.3 其他变异表错误
- 6.5 数据审计
- 6.6 表的多版本
- 6.7 Oracle流
- 6.8 作业队列(临时事件触发器)
- 6.8.1 作业调度
- 6.8.2 作业和DML触发器
- 6.8.3 作业与共享池
- 6.8.4 作业错误
- 6.9 DDL触发器
- 6.9.1 DDL完整性触发器
- 6.9.2 DDL审计跟踪
- 6.10 数据库事件触发器
- 6.11 登录触发器
- 6.11.1 服务器错误触发器
- 6.11.2 挂起事件触发器
- 6.11.3 错误和数据库事件触发器
- 6.12 别“重造轮子”
- 6.13 小结
- 第7章 DBA包
- 7.1 警告文件包
- 7.1.1 包结构
- 7.1.2 警告文件的结构
- 7.1.3 警告文件作为外部表
- 7.1.4 处理警告文件
- 7.1.5 异常
- 7.1.6 通知的生命周期
- 7.1.7 更替警告文件
- 7.1.8 调度和并发
- 7.1.9 使用警告文件的警告
- 7.1.10 回顾警告文件的内容
- 7.1.11 小结
- 7.2 通知包
- 7.2.1 SEND_EMAIL过程
- 7.2.2 在数据库中保存警告消息
- 7.2.3 小结
- 7.3 主动监控包
- 7.3.1 备份
- 7.3.2 归档日志目录下的空闲空间
- 7.3.3 监控数据库中的空闲空间
- 7.3.4 小结
- 7.4 历史数据包
- 7.4.1 数据库大小
- 7.4.2 数据库会话
- 7.4.3 资源限制
- 7.4.4 小结
- 7.5 小结
- 第8章 安全包
- 8.1 设计问题
- 8.1.1 回顾定义者和调用者权限
- 8.1.2 包的构建
- 8.1.3 模式,到处都是模式
- 8.1.4 代码发布
- 8.2 触发器与安全因素
- 8.2.1 安全检查
- 8.2.2 登录触发器:第一道防线
- 8.3 保护源代码
- 8.3.1 查看过程和函数的源代码
- 8.3.2 包的源代码
- 8.3.3 PL/SQL封装工具
- 8.4 小结
- 第9章 Web包
- 9.1 PL/SQL Web工具包基础
- 9.1.1 架构
- 9.1.2 包的汇总
- 9.1.3 从SQL*Plus测试工具包
- 9.2 HTP和HTF包
- 9.3 使用环境变量
- 9.4 cookie
- 9.5 管理文件
- 9.6 通过Web管理表
- 9.7 来自数据库的HTTP
- 9.7.1 提取HTML
- 9.7.2 使用UTL_HTTP的Web服务客户端
- 9.8 小结
- 第10章 PL/SQL调试
- 10.1 防卫型的编码
- 10.1.1 异常
- 10.1.2 装备你的代码
- 10.1.3 写文档
- 10.2 工具
- 10.2.1 DBMS_OUTPUT
- 10.2.2 SQLCODE和SQLERRM
- 10.2.3 DBMS_UTILITY.FORMAT_CALL_STACK
- 10.2.4 DBMS_APPLICATION_INFO
- 10.2.5 自治事务
- 10.2.6 UTL_FILE
- 10.2.7 用管道函数实时调试
- 10.3 自定义BEBUG工具
- 10.3.1 需求
- 10.3.2 数据库设计和安装
- 10.3.3 包的布局
- 10.3.4 实现
- 10.3.5 基本操作
- 10.3.6 使用STATUS
- 10.3.7 有选择的调试
- 10.3.8 调试成品代码
- 10.3.9 DEBUG的用处
- 10.4 小结
- 附录A 构建DEBUG