圖書信息
書名:劍破冰山:Oracle開發藝術
作者:盧濤主編,蘇旭暉 丁俊 副主編,梁敬彬王保強懷曉明 賈書民 編著
ISBN:978-7-121-12075-6
出版日期:2011年1月
定價:69.00元
開本:16開
頁碼:524頁
內容簡介
Oracle資料庫是目前市場占有率最高的商業資料庫,功能非常強大,隨著Oracle管理工具的智慧型化,如Oracle EM提供了強大的管理和調優功能,Oracle DBA的管理工作逐漸趨於簡單化。正因為如此,當前國內Oracle開發人員的崗位需求大幅度增加,投身Oracle開發的人數也日益增多。
一個好的Oracle開發人員不僅要知道一些基本語法和常見用法,還需要知道何時用、如何用、怎么避免相關誤區、寫出高質量的代碼。本書面向有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開發的書籍。長久以來,資料庫後台開發一直是套用開發行業的一項核心工作,能否正確設計一個資料庫的架構,並寫出合理、高效的SQL,決定了一個套用的效能,也在相當大的程度上影響了項目的成敗。而在表象的背後,資料庫開發又遠遠不止表面看到的那么簡單,用作者們的話來說只是冰山一角。除了SQL或PL/SQL以外,我們還可能面對算法、架構、規範等問題。作者們都曾經在各行業的第一線戰鬥過,長期從事資料庫開發各個方面各種細節的工作,由他們去分享10多年來的心得,對於讀者來說是極好的知識共享。以前ITPUB技術叢書中有許多關於資料庫管理的內容,由於所提供的案例許多屬於極端而難以重現,但這本書里的很多例子,讀者都可以很簡單地重現並且自我嘗試,領會其中的精粹,這也是本書和以前DBA方面書籍的一大差異之處。
我和本書的作者們大多在ITPUB上相識了很長時間,他們都是具有豐富行業經驗的專家,也非常熱心。蘇旭暉(newkid)和盧濤(〇〇)Oracle是開發方面的行家,記得當初我在社區里推崇Joe Celko的《SQL puzzles and Answers》一書,結果newkid很快指出這本書里的例子的很多錯誤或者愚笨之處,還專門給出一個帖子來指出書中的錯誤,讓人嘆服。他對技術精益求精,非常關心國內的開發社團,解決了許多網友提出的疑難的實際問題,還經常訂購國內原創的技術書籍。有一次newkid君在論壇上出了一道用SQL去求解四皇后問題的題,不久〇〇就給出了答案,我才第一次知道SQL除了可以用來查詢數據外,還可以有這樣的用途。王保強(bq_wang)、懷曉明(lastwinner)是ITPUB中的元老級會員,bq_wang在項目管理、資料庫、數據倉庫、系統架構套用上很有經驗,在過去幾年中一直擔任大型開發項目的manager,而lastwinner在套用測試和編碼上的能力讓人印象深刻,他是那種天生對問題有靈敏嗅覺的人,解決問題的能力非常強,並帶隊完成了幾個大型開發項目。丁俊(dingjun123)在電信領域有多年系統架構設計和管理經驗,對Oracle資料庫開發很有研究,梁敬彬(wabjtam123)對資料庫管理、設計、開發均有較為深入的研究,同時有著多年的電信行業相關經驗和豐富的培訓經驗,二人在社區中積極熱心幫助別人解決疑難問題,並總結了很多精華內容,得到社區大眾的認可。賈書民則早在20年前就開始使用Oracle資料庫,參加了多個國家級項目的設計和開發,技術功底與行業經驗相當豐厚。由這么多高手嘔心瀝血寫出來的經驗之作,我相信一定能讓讀者讀後有所裨益。
最後我要說從2004年ITPUB第一本技術圖書面世以來,6年過去了,叢書也出版到第10本。2001年9月ITPUB剛剛建立的時候,會員只有一萬多人,經過9年的發展,ITPUB已擁有技術板塊100多個,註冊會員數量超過240萬,每天更新的討論帖數以萬計。感謝蘇旭暉、盧濤、王保強、懷曉明、梁敬彬、丁俊、賈書民在ITPUB即將步入第10個年頭的時候,創作了這本重量級的技術圖書。ITPUB的發展與這樣的專家、第一線技術工作者的長期支持是分不開的,真摯感謝你們對ITPUB的支持!
——ITPUB 創始人 tigerfish 這是一本我期待已久的書,ITPUB論壇已經出版了一系列的資料庫管理書籍,但是開發書籍還是第一本,我一直關注著開發板塊關於SQL方面的技術討論,其涉及技術內容的往往極其精深、有趣、廣泛,將技術玩得有趣是一門藝術,這本書在我看來就是一本關於開發和SQL的藝術之書。
——蓋國強(eygle)Oracle ACEDirector,恩墨科技創始人,ITPUB論壇超級版主
開發,總被很多人當做是一個簡單的事情,其實,若干年前我也是這么認為的,但這么多年與各種套用軟體打交道,發現原來我們所需要診斷、調整、處理的大部分問題,其實,基本上都源於開發,開發看來並不是我們想像中那么淺顯,就像書中所說,我們所用的,其實僅僅是浮在水面上的冰山一角,如果真的認為開發如此簡單,遲早會如鐵達尼號一般撞得頭破血流,而如果早些挖掘出開發深藏的礦脈,就會找到傳說中的開發寶典,而這本書,應該是我們開始尋寶之旅的鑰匙了。
——李軼楠(ora-600) Oracle ACE,ITPUB Oracle入門與認證版資深版主
如果有人問我學習Oracle的經驗,我會告訴他先去看Oracle的官方文檔,但是如果是學習Oracle開發方面的知識,那么我會建議他找本好書去讀。一本好的開發方面的書籍會包括大量生動的例子和實用的案例,這是枯燥和晦澀的官方文檔所不能比擬的。
可惜國內資料庫開發方面的書籍很少,精品更是鳳毛麟角。幸運的是,ITPUB上幾位資深的版主聯手帶來了這本《劍破冰山——Oracle開發藝術》,書中涵蓋了開發各個方面的內容;介紹了開發易犯的錯誤;展示了如何合理利用現有功能來巧妙地解決複雜問題。更難得的是書中很多例子都是真實的案例,閱讀的過程彷佛就是在與高手一起解決問題的過程,自然受益匪淺。
——楊廷琨(yangtingkun) Oralce ACE,海虹醫藥電子商務有限公司首席DBA,ITPUB Oracle資料庫管理版資深版主
儘管與本書的諸位作者大多從未見過面,但幾乎每天都能在Oracle開發版見到他們的身影,最深的印象就是他們對Oracle開發的沉迷,從對每個問題的認真回復、深入討論,到在問題不多時甚至組織一些趣味開發比賽的活動,不難看出他們在Oracle開發方面沉浸多年,功力非凡。虛擬平台里交流的點點滴滴已經讓諸多朋友受益匪淺,這次能夠聯袂出書,更是廣大網友早就期待的事。
有幸在本書出版之前先睹為快,看到部分精彩章節,本書有別於目前市面上能夠買到的Oracle開發類的書籍,該書並未著眼於普通開發的SQL語法、數據結構等方面,而是從作者多年來對Oracle開發技術的研究及實際開發工作經驗中,選取了一些具有較強代表性的案例,比如where IN LIST、號段選取套用等這些大家在開發中都會遇到的開發需求來進行詳細分解。對於IN LIST問題我們也曾詳細考慮過多種處理方案,最終因資料庫兼容問題選擇了臨時表替代方案,此案例中的cardinality HINT與Oracle版本的問題也曾困擾過我。號段選取套用實際上對應於我們套用中的斷號管理,也是ERP系統中單據號管理的一個常用需求,儘管由於資料庫兼容考慮我們沒有使用分析函式,但本書中對分析函式的使用及處理也能為其他解決方案提供有益的參考。看似每個案例處理了一個問題,實際包含了諸多的知識點、設計思想和技巧,作者通過對這些案例的詳細分析與讀者分享了自己的心得、體會與技能技巧,相信每一位從事資料庫開發的讀者都能從中找到自己想要的信息。希望早日看到全書。
——李奎陽(anlinew) 用友資深資料庫專家、產品性能主設計師,ITPUB Oracle專題深入討論版資深版主
你很幸運拿到這本書,從本書你可以學到幾位作者的資料庫開發經驗、開發技巧及資料庫編程思想。幾位作者均是ITPUB開發版資深版主,我深知他們的開發功底相當雄厚,幾位作者聚在一起將自己多年工作中積累總結的精髓分享給大家,這是件值得我們欣喜的事兒。此書包括資料庫開發規範、開發方法,以及資料庫開發設計和資料庫最佳化等精彩內容。作者們以通俗易懂、幽默風趣的語言將自己多年的工作經驗展示給我們。除開發知識外,作者們還詳細講解了 AWR、SQL Trace等Oracle資料庫最佳化工具。相信作者,相信此書,能給Oracle資料庫開發者很好的幫助。不要猶豫了!拿起這本書,按照書中所分享的去實踐吧,相信聰明的你一定會有所收穫的!
——楊向勇(yxyup) 51JOB系統經理兼首席DBA,ITPUB Oracle資料庫管理版資深版主
前 言
長久以來,Oracle管理類的書籍遍地開花,並湧現出了一批批優秀的實戰作品,但在Oracle開發方面,多數都是基礎性的語法書籍,很少有較為深入的實戰性的作品問世。久而久之,大多數人認為Oracle開發就是select、insert之類的DML語句,最多再有點集合操作外加觸發器、函式之類的存儲過程,但這就好像冰山一樣,粗略地一看,只是看到冰山露出水面的尖角而已。而我們知道,冰山在水面下的部分,遠比其水面上的部分要巨大得多。要想探究水面下的冰山,其中之一的方法就是分而治之深入研究,跟隨7位有多年Oracle開發經驗的作者的指引,欣賞他們各自的拿手好戲,學習他們的思路與方法,破開冰山深入其中,從而提升自己的Oracle開發水平。
本書是一本通過講解Oracle資料庫開發案例來說明Oracle資料庫的功能特性、編程思路和設計方法的書籍。通過對每個案例的詳細分析和講解,使讀者了解對同一類開發任務應如何做並能夠領會為什麼這么做,達到融會貫通的目的。
本書主要面向中、高級用戶,所以讀者最好具有一定的Oracle資料庫使用基礎和程式設計基礎(如熟悉基本SQL語句和任何一種過程語言),最好有一定的程式設計經驗。但初級用戶也能從中學到很多有用的東西,包括設計思想和技巧等。通過對本書的學習,相信讀者的Oracle開發水平會上一個新的台階。
本書的案例內容涉及面比較廣泛,包括編程規範、表結構設計、表壓縮、分析函式及高級查詢,從常規數據處理的設計到各類行列轉換技巧,從Oracle的各種實用工具的用法到問題診斷、最佳化等步驟都進行了講解。另外,還針對Oracle某些容易出錯的陷阱進行了介紹,並提出了相應的解決辦法,對某些操作提出了提高效率的措施並進行了驗證。
在眾多內容中,本書也有所側重,力求將作者理解最深入的部分介紹給讀者,例如,動態SQL、PL/SQL的使用、影響執行計畫的因素、減少日誌生成及並行技術等。選擇這些作為側重點的原因有4個方面:第一,目前市面上類似書籍對這些方面的內容涉及不多,而且不夠深入;第二,這些內容在通常的程式設計中使用非常頻繁;第三,這些內容能使讀者更加了解Oracle系統的工作機制;第四,消除很多讀者的認識誤區,例如,認為Oracle資料庫的SQL只是在數據查詢方面很強大,並因此將SQL僅僅定位在查詢語言上。事實上,通過閱讀本書,讀者將會發現 Oracle的SQL功能是非常強大的。在開發中,很多過去必須依靠過程語言實現的功能,比如循環、行間運算,通過分析函式、遞歸子查詢等,SQL基本上都能實現。而且,利用SQL能使開發工作事半功倍,極大地提高開發效率。
本書精選了10多個有獨特的設計思想和編寫技巧的案例來進行分析講解。出版社網站提供包含所有案例的源程式下載,讀者可複製這些代碼到自己的系統中,隨時查看程式的運行結果,以加深對代碼的理解。
我們7位Oracle技術專家來自北京、加拿大多倫多、上海、福建、海南、河北等地,在電信、製造、統計、航空、金融、證券等行業工作多年,工作領域包括項目管理、系統架構、資料庫、數據倉庫和數據挖掘等。
關於本書
蘇旭暉(newkid)是一名定居境外的資深程式設計師,也是ITPUB上最為活躍的熱心網友之一,非常關注國內Oracle資料庫領域,在百忙之中還為我們送來了大禮:第18章“11g R2 新特性之遞歸with編程精粹”,讓讀者有機會使用Oracle提供的最新技術開發項目。他認真審核了我們每個人的文章,指出了很多錯誤和不完善的地方,為本書的完成發揮了重要的作用。
王保強(bq_wang)編著了第1章、第10章、第11章和第20章。丁俊(dingjun123)編著了第4章、第5章、第6章和第7章。梁敬彬(wabjtam123)編著了第2章、第3章、第13章、第14章、第15章、第16章和第17章。懷曉明(lastwinner)編著了第12章。賈書民編著了第9章。盧濤(〇〇)編著了第8章、第19章,並對第2章、第9章的部分內容作了補充。
各章的主要內容如下:
第1章 “大話資料庫編程規範”通過風趣的語言講解了Oracle開發過程中的書寫規範、命名規範、變數命名、注釋規範、語法規範、腳本規範的一些規則和建議。
第2章 “Oracle開發常用工具及使用”的“AWR工具與性能最佳化”一節描述了AWR的基本功能和使用步驟,並通過幾個經典案例的演示讓讀者加深印象,同時證實該工具的強大。“SQL_TRACE事件”一節描述了如何通過該工具了解SQL的解析過程、執行計畫、綁定變數、遞歸調用等詳細信息。最後通過系列事件跟蹤的成功案例來闡述該如何一步步打開各扇SQL困惑大門。“計時和剖析工具”一節主要介紹了利用DBMS_PROFILER包分析PL/SQL代碼的方法和步驟,並根據剖析結果對代碼進行精細的調整。
第3章 “探索MERGE方法”介紹了MERGE存在的原因、具備的特性及哪些是注意點,通過實例講述了MERGE用於複雜更新時的優勢所在,希望讀者能記住這些經典的方法,給自己的項目開發帶來便利。
第4章 “神秘的NULL和令人討厭的CHAR”,第一部分通過大量的實例分析NULL的理論和使用,使讀者對NULL一目了然,從而更好地使用NULL。第二部分通過對CHAR類型多角度的分析,講述特殊的字元類型CHAR的使用和注意點。這兩個知識點是Oracle開發中很重要的知識點,也是出問題較多的知識點,希望通過本章的學習,讀者能夠對這兩個知識點熟練掌握。
第5章 “報表開發之擴展GROUP BY”,這屬於高級SQL方面的知識,在報表開發中是很常見的,本章通過對擴展GROUP BY各個知識點的講解,並通過實例分析,講述如何高效地實現數據的多維分析統計,從而為決策者提供強大的報表支持。
第6章 “探索Oracle自動類型轉換”,這是Oracle開發中很重要的知識點,往往也是Oracle開發人員容易忽視或不完全知曉的知識點,本章通過對各種規則及實例的講述,使讀者對隱式類型轉換有更深刻的認識,從而有助於檢查錯誤和開發高效的程式。
第7章 “Where in list問題解析”,通過對一個常見套用的探討,分析如何通過多種方法解決問題,重點講解如何對問題進行多角度分析,從提出問題到解決問題的過程,希望讀者能夠從這個實例中領會到一般複雜問題的分析和解決過程。
第8章 “例說資料庫表設計和大量數據處理方法”通過各種不同實現的比較講述了一些表設計應遵循的規則,並分析了開發數據載入和卸載、數據匯總套用時可供採用的各種方法的特點。本章側重利用資料庫本身提供的SQL功能完成數據加工,而第19章側重使用過程語言開發。兩章的例子有部分重疊,讀者可鑑別閱讀。
第9章 “數據審核”講述了在Oracle中對表中數據進行高效列間審核和行間審核的各種方法,包括靜態SQL、PL/SQL、動態SQL的使用方法和技巧。
第10章 “趣談Oracle分析函式”講述了分析函式在BI場景中的一些套用,以及自定義聚集函式的實現。
第11章 “Oracle層次查詢”介紹了基本的層次查詢語法SELECT...START WITH... CONNECT BY ...語法,以及SYS_CONNECT_BY_PATH和WMSYS.WM_CONCAT函式的套用。
第12章 “號段選取套用”主要利用層次查詢和分析函式,通過對常見的號段選取的4種情況進行剖析解答,並通過擴展環節拓展了這幾種情況的套用範圍,循序漸進地帶領讀者全面掌握此類問題的攻克方法。
第13章 “分析SQL執行計畫的關注點”並未對各種調優知識進行特別深入的描述,而是將最實用的部分提煉出來告之讀者,力求讀者在讀完本章後能面對紛繁複雜的執行計畫而保持清晰的頭腦,以最敏銳的視角去關注最需了解的信息,從而能迅速、準確地抓出主要矛盾,快速解決問題。
第14章 “Oracle開發誤區探索”來源於日常工作中開發人員所經歷的各個易錯環節,具有較強的隱蔽性和欺騙性,希望讀者在閱讀完本章後能借鑑經驗,在項目開發中少犯錯。
第15章 “提升PL/SQL開發性能漫談”主要從重視解析、關注調用、簡潔為王、細緻入微4個角度入手,結合詳細的案例說明和讀者共同探索PL/SQL開發最佳化的方法和思想。
第16章 “管道函式的學習與實戰套用”結合詳細的示例描述了管道函式的特性、注意點、使用管道函式的場合等知識點。適當地使用管道函式技術將給項目開發帶來很大的便利。
第17章 “巧用鎖特性避免重複啟動同一程式”來源於筆者項目中一次未考慮周全而導致系統數據錯誤的經驗教訓,文中描述的技術方案是將鎖機制和異常捕獲巧妙結合,完美地解決了筆者的問題,並成功將該技術廣泛地套用到各個項目中。
第18章 “11g R2 新特性之遞歸with編程精粹”,本章中的大部分例子看起來像是趣味數學題,似乎實用性不強,讀者們不妨視之為工作之餘放鬆腦筋的益智類遊戲,並從中得到某些啟發。也許在你解決下一個工作中的難題時,遞歸的思想就會大放光彩!
第19章“不可能的任務?超越Oracle”講解了用Oracle內部和第三方過程語言實現數據立方體的方法及提高效率的最佳化方法,說明了在特定條件下,不用SQL,而採用高級語言編程解決高性能要求問題的必要性和可能性。
第20章“動態SQL擴展”通過一些翔實的案例講解了動態SQL的不同套用場景。
書中案例的基本運行環境是Oracle 10gR2,除非有特殊說明,在Oracle 9i中也能運行。個別Oracle 11g的新特性都有專門指出。
本書在很多案例的重要部分都有提示、注意等特殊說明。目的是為了加深讀者的印象,避免不必要的錯誤,以使讀者能夠更高效地利用Oracle強大的功能和開發工具。
感謝ITPUB網站的創始人黃志洪(tigerfish)為本書寫序,他在推動中國Oracle 資料庫的發展上功不可沒。本書正是在他的倡議和幫助下完成的。
感謝楊廷琨(yangtingkun)、羅海雄(rollingpig)、張涵(zhangfengh)、楊向勇(yxyup)和侯聖文(secooler),他們都是國內頂尖的Oracle專家,感謝他們審核了書稿,並提出了寶貴意見。
感謝ITPUB的王蓓小姐(貝貝),在本書的出版過程中,她做了大量的協調工作,才保證這本書的順利出版。
感謝梁敬弘博士對梁敬彬的章節做的仔細修改。
感謝電子工業出版社的張月萍策劃和許艷編輯,是她們的努力讓本書更具可讀性和完整性。
由於作者水平有限,書中難免還存在一些錯誤和不當之處,敬請批評指正。
編 者
2010年8月
目 錄
第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事件 24
2.2.1 SQL_TRACE/事件是什麼 24
2.2.2 總體流程介紹 24
2.2.3 SQL_TRACE事件具體使用方法 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.4groupingSETS實現小計 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.5predicateInformation 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 為何選擇oci488
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