第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 人們?yōu)楹伪芏挥冒?br />2.5.1 忽視分離的好處
2.5.2 這是個包,不是庫
2.6 何時不能使用包
2.7 發(fā)布包
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 在觸發(fā)器中避免變異表錯誤
4.8.2 作為事務的一部分執(zhí)行DDL
4.8.3 審計SELECT語句
4.8.4 回滾后保持審計
4.9 小結
第5章 PL/SQL優(yōu)化技巧
5.1 盡量減少解析和內存消耗
5.1.1 觸發(fā)器內的代碼
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 動態(tài)調用PL/SQL
5.4 PL/SQL中的SQL
5.4.1 SQL函數和遞歸SQL
5.4.2 高效的動態(tài)SQL
5.5 小結
第6章 觸發(fā)器
6.1 觸發(fā)器概念
6.1.1 觸發(fā)器類型
6.1.2 事件屬性
6.1.3 觸發(fā)器計時
6.1.4 多個相似的觸發(fā)器
6.1.5 DML行前與行后觸發(fā)器的性能
6.1.6 權限
6.1.7 觸發(fā)器和數據字典
6.1.8 觸發(fā)器依賴性
6.1.9 觸發(fā)器狀態(tài)
6.1.10 觸發(fā)器失敗
6.1.11 觸發(fā)器的局限性
6.2 DML觸發(fā)器
6.2.1 存儲審計信息
6.2.2 實現轉變約束
6.2.3 生成代理鍵
6.3 替代觸發(fā)器
6.4 變異表
6.4.1 延時處理方案
6.4.2 變異表和自治事務
6.4.3 其他變異表錯誤
6.5 數據審計
6.6 表的多版本
6.7 Oracle流
6.8 作業(yè)隊列(臨時事件觸發(fā)器)
6.8.1 作業(yè)調度
6.8.2 作業(yè)和DML觸發(fā)器
6.8.3 作業(yè)與共享池
6.8.4 作業(yè)錯誤
6.9 DDL觸發(fā)器
6.9.1 DDL完整性觸發(fā)器
6.9.2 DDL審計跟蹤
6.10 數據庫事件觸發(fā)器
6.11 登錄觸發(fā)器
6.11.1 服務器錯誤觸發(fā)器
6.11.2 掛起事件觸發(fā)器
6.11.3 錯誤和數據庫事件觸發(fā)器
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 調度和并發(fā)
7.1.9 使用警告文件的警告
7.1.10 回顧警告文件的內容
7.1.11 小結
7.2 通知包
7.2.1 SEND_EMAIL過程
7.2.2 在數據庫中保存警告消息
7.2.3 小結
7.3 主動監(jiān)控包
7.3.1 備份
7.3.2 歸檔日志目錄下的空閑空間
7.3.3 監(jiān)控數據庫中的空閑空間
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 代碼發(fā)布
8.2 觸發(fā)器與安全因素
8.2.1 安全檢查
8.2.2 登錄觸發(fā)器:第一道防線
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 使用環(huán)境變量
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 防衛(wèi)型的編碼
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