《劍破冰山》是2011年電子工業出版社出版的圖書,作者是盧濤。本書面向有oracle使用經驗或有其他資料庫使用經驗的人,重點講述利用好oracle的特色功能進行高效開發的思路和技巧,幫助讀者快速掌握中高級oracle開發技術。
基本介紹
- 作者:盧濤
- ISBN:9787121120756
- 頁數:520
- 定價:69.00元
- 出版社:電子工業
- 出版時間:2011-1
- 裝幀:平裝
內容介紹,作者介紹,作品目錄,
內容介紹
oracle資料庫是目前市場占有率最高的商業資料庫,功能非常強大,隨著oracle管理工具的智慧型化,如oracle em提供了強大的管理和調優功能,oracle dba的管理工作逐漸趨於簡單化。正因為如此,當前國內oracle開發人員的崗位需求大幅度增加,投身oracle開發的人數也日益增多。
一個好的oracle開發人員不僅要知道一些基本語法和常見用法,還需要知道何時用、如何用、怎么避免相關誤區、寫出高質量的代碼。
本書主要覆蓋oracle開發必備的重要知識點:資料庫編程規範、oracle開發常用工具及使用、merge方法、神秘的null和討厭的char、擴展group by、oracle自動類型轉換、oracle分析函式、oracle層次查詢、11g r2新特性之遞歸with編程、動態sql擴展。此外還有大量案例:where in list問題解析,資料庫設計和大數據量處理、數據審核、號段選取套用、分析sql執行計畫的關注點、oracle開發誤區探索、提升pl/sql開發性能漫談、管道函式的學習與實戰套用、巧用鎖特性避免重複啟動同一程式、不可能的任務?超越oracle等。
本書作者均有多年oracle開發管理實戰經驗,他們期望以自己的經驗和教訓,分享分析和解決問題的方法,探討如何用相關的技術去解決特定的需求。希望讀者在看完本書後,能受到良好的啟迪,進而能極大地提升自己在oracle資料庫開發方面的能力!
作者介紹
ITPUB Oracle開發版版主,15年IT工作經驗,2004年任高級工程師,在某數據管理中心任職系統分析師;曾參與數次全國性數據處理系統的設計與實現。在軟體開發、資料庫開發和最佳化、系統架構、項目管理方面有一定研究。
作品目錄
第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
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