Oracle PL/SQL實戰

Oracle PL/SQL實戰

《OraclePL/SQL實戰》是2012年人民郵電出版社出版的圖書。

基本介紹

  • 書名:Oracle PL/SQL實戰
  • 譯者:盧 濤
  • ISBN:9787115294852 
  • 頁數:436
  • 定價:89.00元
  • 出版社:人民郵電出版社
  • 出版時間:2012-11
  • 裝幀:平裝
  • 副標題:Oracle PL/SQL實戰
內容介紹,作者介紹,作品目錄,

內容介紹

內容簡介:
本書由15位知名技術專家聯手打造,每位作者分別用一章的篇幅介紹他們最擅長的PL/SQL相關主題,涵蓋了PL/SQL開發的方方面面。本書作者要么是Oracle社區中堅分子,要么是大名鼎鼎的OakTable成員,而且經常活躍在Oracle技術培訓第一線,對PL/SQL均有著深入透徹的理解,對解釋複雜問題有著簡單獨到的方法。一冊在手,眾多PL/SQL牛人的真知灼見盡收眼底,你還等什麼?
本書著重介紹了PL/SQL最新、最實用的特性,從什麼該做和什麼不該做、怎么做對,以及怎么做更有效率、效果更好等三個部分全面闡釋了PL/SQL相關的各個主題。而且,每一章都配有非常貼切的示例代碼、跟蹤圖以及輸出結果,輔以深入淺出的講解,令人在恍然大悟之後不禁拍案叫絕。各章內容均涵蓋了PL/SQL實際開發中的最佳實踐,反映了作者多年積累的經驗和教訓,其價值非同一般。
本書適合具有一定PL/SQL經驗的讀者學習參考。
本書主要內容如下:
掌握使用以及避免使用PL/SQL的最佳時機;
使用批量SQL操作高效地載入數據;
使用管道指令、並行操作和代碼剖析,提高代碼的擴展性;
為套用選擇正確的PL/SQL游標類型;
藉助單元測試等有效的開發實踐,減少編碼錯誤;
在運行時動態創建和執行SQL以及PL/SQL。

作者介紹

作者簡介:
John Beresniewicz(約翰·貝雷斯尼維奇)是位於加州紅木城紅木岸(Redwood Shores)的Oracle總部技術團隊的一名諮詢顧問。他於2002年加入Oracle,負責企業管理器的資料庫性能領域,他對診斷和調優包、實時套用測試、支持工作檯和Exadata的設計作出了重要貢獻。多年以來,他經常在Oracle全球大會和其他會議上發言,發言主題包括資料庫性能和PL/SQL編程。他與Steven Fellerstein合著了Oracle Built-in Packages(O’Reilly&Associates,1998年)一書,並且是OakTable網路的創始人之一。
Adrian Billington (阿德里安·比林頓)是套用設計、開發和性能調優方面的顧問。自1999年以來,一直從事Oracle資料庫方面的工作。他是網站的發起人,這個網站為Oracle開發人員提供各種SQL和PL/SQL功能、實用工具和技術。阿德里安還是Oracle ACE,同時也是OakTable網路的成員。現在,他與妻子安吉和三個孩子:喬治亞、奧利弗和伊莎貝拉一起居住在英國。
Martin Büchi (馬丁·步琪)自2004年以來,任Avaloq公司首席軟體架構師。該公司是一個標準化的銀行軟體供應商,其產品基於Oracle RDBMS構建,包含1100萬行PL/SQL代碼。他與兩位同事一起設計了系統架構,並評審了170名全職PL/SQL開發人員的設計和代碼,以追求軟體的簡明、效率和健壯性。馬丁經常在Oracle大會上發言。2009年,他被Oracle Magazine評選為PL/SQL年度開發人員。從事Oracle資料庫工作之前,馬丁曾在面向對象的系統、形式化方法和近似記錄匹配等領域工作。他擁有瑞士聯邦技術研究所的碩士學位和芬蘭土爾庫計算機科學中心的博士學位。業餘時間,馬丁喜歡與他的家人一起進行各種戶外運動。
Melanie Caffrey (梅拉妮·卡弗里)是Oracle公司高級開發經理,為不同客戶的業務需求提供前端和後端的Oracle解決方案。她是多部技術出版物的合著者,包括Oracle Web Application Programming for PL/SQL Developers、Oracle DBA Interactive Workbook、Oracle Database Administration: The Complete Video Course等,這些書全部由Prentice Hall出版。她在紐約哥倫比亞大學的計算機技術與套用課程中指導學生,教授先進的Oracle資料庫管理和PL/SQL開發。她也經常在Oracle會議上發言。
Ron Crisco(羅恩·克里斯科)28年來分別擔任軟體設計師、開發人員和項目負責人,並有21年的Oracle資料庫工作經驗。他在R方法(Method R)公司從事軟體設計和開發、軟體產品管理(如R方法剖析器、MR工具和MR跟蹤)、諮詢、教授課程等工作。他的特長是簡化複雜的工作,這在幫助他身邊的人完成非凡工作時尤顯寶貴。
Lewis Cunningham(劉易斯·坎寧安)在IT領域已經工作了20多年。自1993年以來一直與Oracle資料庫打交道。他的專長是應用程式設計、資料庫設計,以及大容量的VLDB資料庫編碼。目前他任職於佛羅里達州聖彼得堡的一家金融服務公司,擔任高級資料庫架構師,負責超大規模、高事務率分析型資料庫和應用程式的工作。他花了大量時間來與最新的技術和趨勢保持同步,並在用戶組發表演講,舉辦網路研討會。劉易斯也是一位Oracle ACE總監和Oracle認證專家。劉易斯寫了兩本書:EnterpriseDB: The Definitive Reference(Rampant Tech press,2007年)和SQL DML: The SQL Starter Series(CreateSpace,2008年)。他與他的妻子及兩個兒子起住在佛羅里達州。
Dominic Delmolino (多米尼克·德莫里諾)是Agilex技術公司首席Oracle和資料庫技術專家,這是一家專門協助政府和私營企業實現信息價值的諮詢公司。多米尼克擁有24年以上的資料庫經驗,其中擔任過20多年的Oracle資料庫工程和開發專家。他是OakTable網路的成員,並定期出席各種學術會議、研討會,以及歐洲和美國的用戶組會議。他還維護網站,該網站專注於與資料庫應用程式開發相關的資料庫編碼和設計實踐。多米尼克擁有紐約州伊薩卡康奈爾大學的計算機科學學士學位。
Sue Harper (蘇·哈珀)是資料庫開發工具組中的Oracle SQL Developer和SQL Developer數據建模器的產品經理。她自1992年以來一直在Oracle公司工作,目前在倫敦辦事處工作。蘇是一些雜誌的特約撰稿人,維護著一個技術部落格,並在世界各地的許多會議上發言。她撰寫了技術書籍Oracle SQL Developer 2.1(Packt,2009),業餘時間,蘇喜歡步行和攝影。同時,她還花時間到新德里的貧民區做慈善工作,幫助那裡的婦女和兒童。
Torben Holm (托爾·霍爾姆)自1987年以來一直從事開發工作。自1992年以來,他一直致力於與Oracle相關的工作,前四年擔任系統分析師和應用程式開發人員(Oracle 7、Forms 4.0/Reports 2.0和DBA),然後做了兩年開發(ORACLE6/7、Forms 3.0和RPT以及DBA)。他在Oracle丹麥公司的高級服務組工作了數年,擔任首席高級顧問,執行應用程式開發和DBA任務。他還擔任過PL/SQL、SQL和DBA課程的講師。現在,托爾在Miracle A/S工作,擔任顧問,負責套用開發(PLSQL、mod_plsql、Forms、ADF)和資料庫管理。10年來他一直在 Miracle A/S公司工作。他是Oracle認證開發人員,並且也是OakTable網路成員。
Connor McDonald (康納·麥當勞)自20世紀90年代初一直從事Oracle相關工作,他非常熟悉Oracle 6.0.36和Oracle 7.0.12。在過去11年中,康納曾為位於西歐、東南亞、澳大利亞、英國和美國的公司開發過系統。他已經認識到,雖然世界各地的系統及方法非常多樣,但開發在Oracle上運行的系統往往有兩個共同的問題:要么避免使用Oracle特定的功能,要么就是採取不太理想的用法或隨意亂用它們。正是這種觀察,促使他創建了一個提示和技巧的個人網站,並努力在Oracle演講者組織中發表更多演講,以提高PL/SQL的業內認知度和普及度。
Arup Nanda (奧雅納·南大)自1993年以來,一直是Oracle DBA,他熟悉資料庫管理的所有方面,從建模到災難恢復。目前,他在紐約州白原市的喜達屋酒店(即喜來登、威斯汀等連鎖酒店的母公司)領導全球DBA團隊。他是獨立Oracle用戶協會(IOUG)旗下出版物SELECT Journal的特約編輯,在許多Oracle技術盛會,如Oracle全球和本地用戶組(如紐約Oracle用戶組)中發表演講,並為印刷出版物如Oracle Magazine和網路出版物如Oracle Techndogy Network撰寫了許多文章。奧雅納與他人合著了兩本書:Oracle Privacy Security Auditing(Rampant,2003年)和Oracle PL/SQL for DBAs(O’Reilly,2005年)。由於他的專業成就和對用戶社區的貢獻,Oracle評選他為2003年年度DBA。奧雅納與他的妻子Anindita和兒子阿尼什住在康乃狄克州的丹伯里。
Stephan Petit (史蒂芬·佩蒂特)於1995年在位於瑞士日內瓦的歐洲粒子物理實驗室(CERN)開始了他的職業生涯。他現在是一個軟體工程師和學生團隊的負責人,負責為實驗室和其他部門提供應用程式和工具。工程和設備數據管理系統是這些工具之一,也稱為CERN EDMS。像CERN的大型強子對撞機(LHC)項目有40年或以上的生命周期。 EDMS是實驗室的數位化工程的記憶體/記憶體。電子檔案管理系統中存儲了與一百多萬件設備有關的一百多萬份檔案,EDMS也供CERN的產品生命周期管理(PLM)和資產跟蹤系統使用。 EDMS幾乎完全是基於PL/SQL的,並旨在擁有一個至少與LHC一樣長的生命周期。
史蒂芬和他的團隊一直在完善PL/SQL編碼規範和最佳實踐,以滿足他們非常有趣的各種挑戰的組合:幾十年的可維護性、可靠性、高效的錯誤處理、可擴展性、模組的可重用性。團隊成員的頻繁輪換,其中大部分只是暫時在CERN實習的學生,加劇了這些挑戰。最古老的一段代碼是在1995年寫的,現在仍然在使用——並且成功地運行!除了完善PL/SQL,史蒂芬還喜歡不時登台表演,比如擔任CERN搖滾夏季音樂節的搖滾樂隊歌手,以及在多部戲中出演角色。
Michael Rosenblum (麥可·羅森布魯姆)是Dulcian公司的軟體架構師/開發DBA,他負責系統調優和應用程式架構。麥可通過編寫複雜的PL/SQL例程和研究新功能支持Dulcian開發人員。他是PL/SQL for Dummies(Wiley,2006年)一書的作者之一,並在IOUG Select Journal和ODTUG Tech Journal發表了許多篇與資料庫相關的文章。麥可是一位Oracle ACE,也經常出席不同地區和國家的Oracle用戶組大會(Oracle OpenWorld大會、ODTUG、IOUG Collaborate、RMOUG、NYOUG等),他是ODTUG萬花筒2009年“最佳演講獎”得主。在他的家鄉烏克蘭,他獲得了烏克蘭總統獎學金,並擁有信息系統理學碩士學位並以優異成績獲得基輔國立經濟大學畢業證書。
Robyn Sands (羅賓·桑茲)是思科系統公司的軟體工程師,她為思科的客戶設計和開發嵌入式Oracle資料庫產品。自1996年以來,她一直使用Oracle軟體,並在套用開發、大型系統實現和性能測量方面具有豐富經驗。羅賓的職業生涯始於工業工程和質量工程,她將自己對數據的摯愛結合到以前接受的教育和工作經驗中,尋找新方法來建立性能穩定、易於維護的資料庫系統。她是OakTable網路成員,並是下面兩本Oracle書籍的作者之一:Expert Oracle Practices和Pro Oracle SQL(都由Apress出版,2010)。
Riyaj Shamsudeen是OraInternals公司首席資料庫管理員和主席,這是一家從事性能調優/資料庫恢復/EBS11i等領域的諮詢公司。他專門研究真正的套用集群(RAC)、性能調優和資料庫內部結構。他還經常在其部落格上發表這些技術領域的文章。他也經常出席許多國際會議,如HOTSOS、COLLABORATE、RMOUG、SIOUG、UKOUG等,他是OakTable網路的驕傲一員。他擁有16年以上使用Oracle技術產品的經驗,並擔任了15年以上的Oracle/Oracle應用程式資料庫管理員。

作品目錄

目 錄
第1章  避免誤用 1
1.1  逐行處理 1
1.2  嵌套的逐行處理 3
1.3  查找式查詢 5
1.4  對DUAL的過度訪問 8
1.4.1  日期的算術運算 8
1.4.2  訪問序列 9
1.4.3  填充主—從行 9
1.5  過多的函式調用 10
1.5.1  不必要的函式調用 10
1.5.2  代價高昂的函式調用 12
1.6  資料庫連結調用 14
1.7  過度使用觸發器 15
1.8  過度提交 15
1.9  過度解析 16
1.10  小結 16
第2章  動態SQL:處理未知 18
2.1  動態SQL的三種方式 19
2.1.1  本地動態SQL 19
2.1.2  動態游標 21
2.1.3  DBMS_SQL 25
2.2  動態思考的樣例 26
2.3  安全問題 30
2.4  性能和資源利用率 33
2.4.1  反模式 34
2.4.2  比較動態SQL的實現 35
2.5  對象的依賴關係 37
2.5.1  負面影響 37
2.5.2  正面影響 37
2.6  小結 38
第3章  PL/SQL和並行處理 39
3.1  為什麼需要並行處理 39
3.2  影響並行處理的定律 40
3.3  大數據的崛起 40
3.4  並行與分散式處理 41
3.5  並行硬體體系結構 41
3.6  確定目標 42
3.6.1  加速 42
3.6.2  按比例擴展 43
3.6.3  並行度 43
3.7  用於並行處理的候選工作負載 43
3.7.1  並行和OLTP 43
3.7.2  並行和非OLTP工作負載 44
3.8  MapReduce編程模型 44
3.9  在使用PL/SQL之前 45
3.10  可用於並行活動的進程 45
3.11  使用MapReduce的並行執行伺服器 46
3.11.1  管道表函式 46
3.11.2  指導 60
3.11.3  並行管道表函式小結 61
3.12  小結 61
第4章  警告和條件編譯 62
4.1  PL/SQL 警告 62
4.1.1  基礎 62
4.1.2  使用警告 63
4.1.3  升級警告為錯誤 67w4.1.4  忽略警告 68
4.1.5  編譯和警告 69
4.1.6  關於警告的結束語 72
4.2  條件編譯 72
4.2.1  基礎 72
4.2.2  正在運行代碼的哪部分 75
4.2.3  預處理代碼的好處 76
4.2.4  有效性驗證 78
4.2.5  控制編譯 80
4.2.6  查詢變數 81
4.2.7  關於條件編譯的結束語 82
4.3  小結 84
第5章  PL/SQL單元測試 85
5.1  為什麼要測試代碼 85
5.2  什麼是單元測試 86
5.2.1  調試還是測試 86
5.2.2  建立測試的時機 86
5.3  單元測試構建工具 87
5.3.1  utPLSQL:使用命令行代碼 87
5.3.2  Quest Code Tester for Oracle 87
5.3.3  Oracle SQL Developer 88
5.4  準備和維護單元測試環境 88
5.4.1  創建單元測試資料檔案庫 89
5.4.2  維護單元測試資料檔案庫 90
5.4.3  導入測試 91
5.5  構建單元測試 91
5.5.1  使用單元測試嚮導 91
5.5.2  創建第一個測試實施 92
5.5.3  添加啟動和拆除進程 93
5.5.4  收集代碼覆蓋率統計信息 93
5.5.5  指定參數 93
5.5.6  添加進程驗證 94
5.5.7  保存測試 95
5.5.8  調試和運行測試 95
5.6  擴大測試的範圍 95
5.6.1  創建查找值 96
5.6.2  植入測試實施 97
5.6.3  創建動態查詢 98
5.7  支持單元測試功能 99
5.7.1  運行報告 99
5.7.2  創建組件庫 100
5.7.3  導出、導入和同步測試 103
5.7.4  構建套件 105
5.8  從命令行運行測試 105
5.9  小結 106
第6章  批量SQL操作 107
6.1  五金商店 107
6.2  設定本章的例子 108
6.3  在PL/SQL中執行批量操作 108
6.3.1  批量獲取入門 110
6.3.2  三種集合風格的數據類型 112
6.3.3  為什麼要自找麻煩 114
6.3.4  監控批量收集的開銷 116
6.3.5  重構代碼以使用批量收集 119
6.4  批量綁定 127
6.4.1  批量綁定入門 127
6.4.2  度量批量綁定性能 128
6.4.3  監視記憶體的使用 131
6.4.4  11g中的改進 133
6.5  批量綁定的錯誤處理 134
6.5.1  SAVE EXCEPTIONS和分批操作 137
6.5.2  LOG ERRORS子句 138
6.5.3  健壯的批量綁定 139
6.6  大規模集合的正當理由 143
6.7  真正的好處:客戶端批量處理 145
6.8  小結 149
第7章  透識你的代碼 151
7.1  本章內容取捨 152
7.2  自動代碼分析 153
7.2.1  靜態分析 154
7.2.2  動態分析 154
7.3  執行分析的時機 154
7.4  執行靜態分析 156
7.4.1  數據字典 156
7.4.2  PL/Scope 163
7.5  執行動態分析 175
7.5.1  DBMS_PROFILER和DBMS_TRACE 175
7.5.2  DBMS_HPROF 184
7.6  小結 189
第8章  契約導向編程 190
8.1  契約式設計 190
8.1.1  軟體契約 190
8.1.2  基本契約要素 191
8.1.3  斷言 192
8.1.4  參考文獻 192
8.2  實現PL/SQL契約 192
8.2.1  基本的ASSERT程式 192
8.2.2  標準的包本地斷言 194
8.2.3  使用ASSERT執行契約 196
8.2.4  其他改進 198
8.2.5  契約導向函式原型 199
8.3  示例:測試奇數和偶數 200
8.4  有用的契約模式 202
8.4.1  用NOT NULL輸入且輸出NOT NULL 202
8.4.2  函式返回NOT NULL 203
8.4.3  布爾型函式返回NOT NULL 203
8.4.4  檢查函式:返回TRUE或ASSERTFAIL 204
8.5  無錯代碼的原則 205
8.5.1  嚴格地斷言先決條件 205
8.5.2  一絲不苟地模組化 206
8.5.3  採用基於函式的接口 206
8.5.4  在ASSERTFAIL處崩潰 207
8.5.5  對後置條件進行回歸測試 207
8.5.6  避免在正確性和性能之間取捨 207
8.5.7  採用Oracle 11g最佳化編譯 208
8.6  小結 209
第9章  從SQL調用PL/SQL 210
9.1  在SQL中使用PL/SQL函式的開銷 210
9.1.1  上下文切換 211
9.1.2  執行 216
9.1.3  欠理想的數據訪問 218
9.1.4  最佳化器的難點 222
9.1.5  讀一致性陷阱 226
9.1.6  其他問題 228
9.2  降低PL/SQL函式的開銷 228
9.2.1  大局觀 229
9.2.2  使用SQL的替代品 230
9.2.3  減少執行 236
9.2.4  協助CBO 244
9.2.5  調優PL/SQL 255
9.3  小結 257
第10章  選擇正確的游標 258
10.1  顯式游標 258
10.1.1  解剖顯式游標 260
10.1.2  顯式游標和批量處理 261
10.1.3  REF游標簡介 262
10.2  隱式游標 263
10.2.1  解剖隱式游標 264
10.2.2  隱式游標和額外獲取的理論 265
10.3  靜態REF游標 267
10.3.1  詳細的游標變數限制清單 269
10.3.2  客戶端和REF游標 270
10.3.3  有關解析的話題 271
10.4  動態REF游標 273
10.4.1  例子和最佳用法 273
10.4.2  SQL注入的威脅 275
10.4.3  描述REF游標中的列 276
10.5  小結 277
第11章  大規模PL/SQL編程 279
11.1  將資料庫作為基於PL/SQL的套用伺服器 279
11.1.1  案例研究:Avaloq銀行系統 279
11.1.2  在資料庫中使用PL/SQL實現業務邏輯的優勢 281
11.1.3  用資料庫作為基於PL/SQL的應用程式伺服器的限制 283
11.1.4  軟因素 284
11.2  大規模編程的要求 284
11.3  通過規範實現一致性 285
11.3.1  縮寫詞 286
11.3.2  PL/SQL標識符的前綴和後綴 289
11.4  代碼和數據的模組化 291
11.4.1  包和相關的表作為模組 293
11.4.2  含有多個包或子模組的模組 297
11.4.3  模式作為模組 299
11.4.4  在模式內部模組化 303
11.4.5  用模式模組化與在模式內模組化的比較 306
11.5  使用PL/SQL面向對象編程 306
11.5.1  使用用戶定義類型的面向對象編程 307
11.5.2  使用PL/SQL記錄面向對象編程 310
11.5.3  評估 316
11.6  記憶體管理 317
11.6.1  測量記憶體使用 317
11.6.2  集合 322
11.7  小結 325
第12章  漸進式數據建模 326
12.1  從二十年的系統開發中總結的經驗 327
12.2  資料庫和敏捷開發 328
12.3  漸進式數據建模 329
12.4  重構資料庫 331
12.5  通過PL/SQL創建訪問層 335
12.6  敏捷宣言 347
12.7  用PL/SQL進行漸進式數據建模 349
12.7.1  定義接口 349
12.7.2  思考可擴展性 349
12.7.3  測試驅動開發 350
12.7.4  明智地使用模式和用戶 350
12.8  小結 351
第13章  性能剖析 352
13.1  何謂性能 353
13.1.1  功能需求 353
13.1.2  回響時間 353
13.1.3  吞吐量 354
13.1.4  資源利用率 354
13.1.5  性能是功能的一種 355
13.2  什麼是剖析 356
13.2.1  順序圖 356
13.2.2  概要檔案之神奇 357
13.2.3  性能剖析的好處 357
13.3  性能測量 358
13.3.1  這個程式為什麼慢 358
13.3.2  測量嵌入 360
13.3.3  識別 360
13.3.4  條件編譯 364
13.3.5  內建的剖析器 365
13.3.6  擴展的SQL跟蹤數據(事件10046) 365
13.3.7  針對Oracle的測量工具庫(ILO) 366
13.4  問題診斷 368
13.4.1  R方法 369
13.4.2  ILO示例 371
13.4.3  剖析示例 373
13.5  小結 376
第14章  編碼規範和錯誤處理 378
14.1  為什麼要制訂編碼規範 378
14.2  格式化 379
14.2.1  大小寫 379
14.2.2  注釋 380
14.2.3  比較 380
14.2.4  縮進 380
14.3  動態代碼 383
14.4  包 384
14.5  存儲過程 385
14.5.1  命名 385
14.5.2  參數 386
14.5.3  調用 386
14.5.4  局部變數 386
14.5.5  常量 386
14.5.6  類型 387
14.5.7  全局變數 387
14.5.8  本地存儲過程和函式 387
14.5.9  存儲過程元數據 388
14.6  函式 388
14.7  錯誤處理 389
14.7.1  錯誤捕獲 389
14.7.2  錯誤報告 390
14.7.3  錯誤恢復 391
14.7.4  先測試再顯示 392
14.8  小結 392
第15章  依賴關係和失效 395
15.1  依賴鏈 395
15.2  縮短依賴鏈 401
15.3  數據類型引用 406
15.4  用於表修改的視圖 407
15.5  把組件添加到包 410
15.6  依賴鏈中的同義詞 413
15.7  資源鎖定 414
15.8  用觸發器強制執行依賴 415
15.9  創建最初禁用的觸發器 418
15.10  小結 420

相關詞條

熱門詞條

聯絡我們