天天看點

劍破冰山—Oracle開發藝術 目錄

第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

本文轉自baoqiangwang51CTO部落格,原文連結:http://blog.51cto.com/baoqiangwang/419814,如需轉載請自行聯系原作者