第1章 大話數據庫編程規範 1
1.1 編程規範概述 1
1.2 書寫規範 2
1.2.1 大小寫風格 2
1.2.2 縮進風格 2
1.2.3 空格及換行 3
1.2.4 其他 4
1.3 命名規範 4
1.3.1 錶和字段命名規範 4
1.3.2 其他對象命名 5
1.4 變量命名 7
1.5 注釋規範 8
1.6 語法規範 9
1.7 腳本規範 12
規則1.7.1 13
規則1.7.2 13
規則1.7.3 13
第2章 oracle開發常用工具及使用 14
2.1 awr工具與性能優化 14
2.1.1 awr介紹 14
.2.1.2 awr的安裝與配置 15
2.1.3 awr報錶使用 15
2.1.4 分析awr報錶基本思路 17
2.1.5 案例 17
2.2 sql_trace/10046事件 24
2.2.1 sql_trace/10046事件是什麼 24
2.2.2 總體流程介紹 24
2.2.3 sql_trace/10046事件具體使用方法 24
2.2.4 案例分析 28
2.2.5 小結 32
2.3 計時和剖析工具 32
2.3.1 plsql_profiler概述 34
2.3.2 剖析舉例 37
2.3.3 安全性 45
第3章 探索merge方法 46
3.1 merge是什麼 46
3.2 oracle 10g中merge的完善 48
3.2.1 update和insert動作可隻齣現其一 48
3.2.2 可對merge語句加條件 48
3.2.3 可用delete子句清除行 49
3.2.4 可采用無條件方式insert 49
3.3 merge誤區探索 49
3.3.1 無法在源錶中獲得一組穩定的行 49
3.3.2 delete子句的where順序必須在最後 51
3.3.3 delete 子句隻可以刪除目標錶,而無法刪除源錶 52
3.3.4 更新同一張錶的數據,需擔心using的空值 53
3.4 merge的巧妙運用 54
第4章 神秘的null和令人討厭的char 58
4.1 神秘的null 59
4.1.1 null概述 59
4.1.2 null與函數 64
4.1.3 null與索引 79
4.1.4 null與sql 87
4.1.5 null與pl/sql 97
4.1.6 再談null和空字符串區彆 101
4.1.7 null總結 101
4.2 令人討厭的char 102
4.2.1 char與varchar2基礎 102
4.2.2 char與sql 105
4.2.3 char與綁定變量 109
4.2.4 char與pl/sql 111
4.2.5 char總結 112
第5章 報錶開發之擴展group by 113
5.1 擴展group by概述 113
5.2 rollup 114
5.2.1 union all實現rollup功能 114
5.2.2 rollup分組 116
5.2.3 部分rollup分組 120
5.2.4 rollup總結 121
5.3 cube 121
5.3.1 cube分組 121
5.3.2 部分cube分組 123
5.3.3 cube總結 124
5.4 grouping sets實現小計 124
5.4.1 grouping sets分組 124
5.4.2 部分grouping sets分組 126
5.4.3 cube、rollup作為grouping sets的參數 126
5.4.4 grouping sets總結 128
5.5 組閤列分組、連接分組、重復列分組 128
5.5.1 組閤列分組 130
5.5.2 連接分組 132
5.5.3 重復列分組 134
5.5.4 組閤列分組、連接分組、重復列分組總結 134
5.6 3個擴展分組函數:grouping、grouping_id、group_id 135
5.6.1 grouping函數 135
5.6.2 grouping_id函數 138
5.6.3 group_id函數 142
5.6.4 擴展group by函數總結 144
5.7 擴展分組綜閤實例 144
第6章 探索oracle自動類型轉換 149
6.1 為什麼不建議使用自動類型轉換 150
6.2 自動類型轉換規則 156
6.3 自動類型轉換常見錯誤 166
第7章 where in list問題解析 169
7.1 問題引入:動態sql構造 170
7.2 使用正則錶達式解決 172
7.3 使用常規字符串函數及動態視圖 173
7.4 使用集閤構造僞錶 176
7.5 where in list性能問題 178
7.6 where in list問題總結 188
第8章 例說數據庫錶設計和大量數據處理方法 189
8.1 根據業務需求規劃錶結構 189
8.2 主鍵的確定 195
8.3 錶的拆分、閤並及數據的規範和反規範化 199
8.4 數據類型的選擇 199
8.5 錶的分區 203
8.6 錶的壓縮 203
8.7 抽取數據 205
8.7.1 利用sql*plus的spool功能 205
8.7.2 利用utl_file 207
8.7.3 利用第三方工具 207
8.8 轉換數據 207
8.8.1 數據的增刪改 208
8.8.2 數據匯總 211
8.9 加載數據 227
8.9.1 利用sqlldr加載 227
8.9.2 利用外部錶加載 229
8.9.3 利用數據庫鏈接加載 233
8.9.4 利用分區交換技術加載 234
8.10 邏輯導入/導齣數據 240
第9章 數據審核 242
9.1 審核的分類 242
9.2 列審核設計 243
9.2.1 直接使用sql語句 245
9.2.2 提高審核效率 248
9.2.3 管理審核關係 254
9.2.4 單個列的復雜審核 257
9.3 行審核設計 258
9.3.1 重碼的審核 259
9.3.2 直接使用sql語句 260
9.3.3 管理審核關係 261
9.3.4 行間包含四則運算的審核思路 266
9.3.5 更復雜的行間審核思路 267
9.4 小結 267
第10章 趣談oracle分析函數 269
10.1 概述 269
10.2 函數語法 270
10.3 函數列錶 276
10.4 函數用法 277
10.4.1 最常見的分析函數應用場景 279
10.4.2 rows的具體用法 280
10.4.3 range的具體用法 281
10.4.4 keep的用法 283
10.5 函數功能詳解 284
10.5.1 統計函數 284
10.5.2 排序函數 285
10.5.3 數據分布函數 287
10.5.4 統計分析函數 289
10.6 分析函數在bi及統計上的應用 290
10.6.1 現狀分析 290
10.6.2 發展分析 297
10.7 自定義聚集函數 298
10.7.1 自定義聚集函數接口簡介 298
10.7.2 應用場景一:字符串聚集 299
10.7.3 應用場景二:指數移動平均綫 301
第11章 oracle層次查詢 305
11.1 概述 305
11.2 樣例數據 306
11.3 connect by和start with查詢 306
11.3.1 概述 306
11.3.2 基本語法 306
11.3.3 樣例 308
11.4 sys_connect_by_path函數 313
11.5 wmsys.wm_concat非公開函數 314
第12章 號段選取應用 316
12.1 問題的提齣 316
12.2 相關基礎知識 317
12.2.1 僞列rownum和level 317
12.2.2 利用層次查詢構造連續的數 317
12.2.3 用lead和lag獲得相鄰行的字段值 318
12.3 解決問題 320
12.3.1 已知號碼求號段 320
12.3.2 根據號段求齣包含的數 324
12.3.3 求缺失的號 326
12.3.4 求尚未使用的號段 330
12.4 小結 334
第13章 分析sql執行計劃的關注點 335
13.1 返迴行與邏輯讀的比率 335
13.2 聚閤查詢 338
13.3 返迴行的數量 341
13.4 oracle預測行準確與否 342
13.5 predicate information 346
13.6 動態采樣 348
13.7 誰是主要矛盾 349
第14章 oracle開發誤區探索 352
14.1 避免對列運算 352
14.2 消除隱式轉換 354
14.3 關注空格 354
14.4 存儲過程與權限 355
14.5 提防ddl提交事務 357
14.6 insert into 錯誤 359
14.7 關於or 360
14.8 sequence中的cache 361
14.9 樹形查詢易錯處 364
14.10 小心保留字 367
14.11 函數索引陷阱 371
14.12 外連接陷阱 374
14.13 標量子查詢 375
第15章 提升pl/sql開發性能漫談 378
15.1 重視解析 378
15.1.1 觸發器盡量考慮內部代碼過程封裝 378
15.1.2 避免動態sql 380
15.1.3 oltp係統中盡量使用綁定變量 382
15.2 關注調用 384
15.2.1 減少對sysdate的調用 384
15.2.2 避免對mod函數的調用 385
15.2.3 設法減少錶掃描次數 386
15.2.4 避免sql中的函數調用 391
15.3 簡潔為王 395
15.3.1 盡量用簡單sql替代pl/sql邏輯 395
15.3.2 避免不必要的排序 397
15.3.3 利用oracle現有功能 399
15.4 細緻入微 400
15.4.1 使用pls_integer類型 400
15.4.2 避免數據類型轉換 400
15.4.3 if的順序有講究 402
15.4.4 設計開發對列是否為空慎重決定 404
15.4.5 分布式應用開發不可不知的hint(driving_site) 407
第16章 管道函數的學習與實戰應用 410
16.1 管道函數編寫要點 410
16.2 功能描述及案例 411
16.2.1 可直接用table()操作符方式輸齣結果集 411
16.2.2 結果集可作為錶來使用,直接和其他錶相關聯 411
16.2.3 實現實時跟蹤 412
16.3 管道函數注意點 414
16.3.1 清楚管道函數隻是錶函數的一種 414
16.3.2 管道函數與dml 415
16.3.3 管道函數集閤的限製 416
16.3.4 與管道函數相關的異常no_data_needed 417
第17章 巧用鎖特性避免重復啓動同一程序 420
17.1 基本技巧介紹 420
17.2 原理介紹 422
17.3 程序代碼 423
17.4 測試 426
17.5 需要注意的點 427
第18章 11g r2 新特性之遞歸with編程精粹 428
18.1 上下級關係 429
18.2 構造數列 435
18.3 排列組閤問題 441
18.4 沿路徑計算 457
18.5 國際sql挑戰賽 473
第19章 不可能的任務?超越oracle 479
19.1 為何選擇cube 480
19.1.1 cube簡介 480
19.1.2 cube優勢 480
19.1.3 測試環境 481
19.2 newkid的設計思路和優化步驟 482
19.2.1 一次掃描求齣16種分組 482
19.2.2 一次掃描求齣1種分組,並基於此再一次掃描求齣其餘分組 484
19.2.3 一次掃描求齣1種分組,並基於此再多次分層纍計求齣其餘分組 485
19.2.4 變量長度和類型的優化 487
19.3 為何選擇oci 488
19.3.1 匯總算法的翻譯和改進 488
19.3.2 輸入和輸齣的實現和改進 489
19.3.3 不要忽視物理存儲對數據庫操作的影響 490
19.3.4 不成功的優化教訓 490
19.4 總結 493
第20章 動態sql擴展 494
20.1 動態sql用途和應用場景 494
20.2 execute immediate語法 495
20.2.1 執行ddl、dcl語句 495
20.2.2 構造通用sql處理 496
20.2.3 執行復雜業務邏輯查詢 498
20.2.4 綁定變量 502
20.2.5 bulk collect動態sql 505
20.3 使用dbms_sql包 507
20.3.1 dbms_sql函數和過程說明 507
20.3.2 dbms_sql執行步驟 508
20.3.3 dbms_sql應用場景 509
20.3.4 dbms_sql與execute immediate比較 509
後記 511
· · · · · · (
收起)