<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!-- [if !mso]> <object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui> </object> <style> st1/:*{behavior:url(#ieooui) } </style> <![endif]--><!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->
前言
长久以来,Oracle 管理类的书籍遍地开花,并涌现出了一批优秀的实战作品,但在Oracle 开发方面,却多数都是基础性的语法书籍,很少有较为深入的实战性的作品问世。久而久之,大多数人认为Oracle 开发就是select 、insert 之类的DML 语句最多再有点集合操作外加触发器、函数之类的存储过程,但这就好像冰山一样,粗略的一看,只是看到冰山露出水面的尖角而已。而我们知道,冰山在水面下的部分,远比其水面上的部分要巨大得多。要想探究水面下的冰山,其中之一的方法就是分而治之深入研究,跟随七位有多年丰富Oracle 开发经验的作者的指引,欣赏他们各自的拿手好戏,学习他们的思路与方法,破开冰山深入其中,从而提升自己的Oracle 开发水平。
本书是一本通过讲解Oracle 数据库开发案例来说明Oracle 数据库功能特性以及编程思路和设计方法的书籍。通过对每个案例的详细分析和讲解,使读者了解对同一类开发任务应如何做并能够领会为何这么做,达到融会贯通的目的。
本书主要面向中、高级用户,所以读者最好具有一定的Oracle 数据库使用基础和程序设计基础(例如,熟悉基本SQL 语句和任何一种过程语言),最好有一定的程序设计经验。但初级用户也能从中学到很多有用的东西,包括设计思想和技巧等。通过本书的学习,相信读者的Oracle 开发水平会上一个新的台阶。
本书的案例内容涉及面比较广泛,包括编程规范、表结构设计、表压缩、分析函数以及高级查询,从常规数据处理的设计到各类行列转换技巧,从Oracle 的各种实用工具的用法到问题诊断、优化等步骤都进行了讲解。另外,还针对Oracle 某些容易错的陷阱作了介绍,并提出了相应的解决办法,对某些操作提出了提高效率的措施并进行了验证。
在众多内容中,本书也有所侧重,力求将作者理解最深入的部分介绍给读者。例如动态SQL,PL/SQL 块的使用、影响执行计划的因素、减少日志生成以及并行技术等。选择这些作为侧重点的原因有4 个方面:第一,目前市面上类似书籍对这些方面的内容涉及不多,而且不够深入;第二,这些内容在通常的程序设计中使用非常频繁;第三,这些内容能使读者更加了解Oracle 系统的工作机制;第四,消除很多读者的认识误区,例如,认为Oracle 数据库的SQL 只是在数据查询方面很强大,并因此将SQL 仅仅定位在查询语言上。事实上,通过阅读本书,读者将会发现 Oracle 的SQL 功能是如此强大。在开发中,很多过去必须依靠过程语言实现的功能,比如循环、行间运算,通过分析函数、递归子查询等,SQL 基本上都能实现。而且,利用SQL 能使开发工作事半功倍,极大地提高开发效率和效率。
本书精选了10 多个有独特的设计思想和编写技巧的案例来进行分析讲解。出版社网站提供包含所有案例的源程序下载,读者可复制这些代码到自己的系统中,随时查看程序的运行结果,以加深对代码的理解。
我们7 位Oracle 技术专家来自北京、加拿大、上海、福建、海南、河北等地,在电信、制造、统计、航空、金融、证券等行业工作多年,工作领域包括项目管理、系统架构、数据库、数据仓库和数据挖掘等。
本书共分20 章。
苏旭晖(newkid )是一名定居境外的资深程序员,也是ITPUB 上最为活跃的热心网友之一,非常关注国内Oracle 数据库领域,在百忙之际还为我们送来了大礼:第18 章“11gR2 的新特性:递归子查询”,让读者有机会使用Oracle 提供的最新的技术开发项目。他更认真审核了我们每个人的文章,指出了很多错误和不完善的地方,为本书的完成发挥了重要的作用。
王保强(bq_wang) 编著了第1 章、第10 章、第11 章和第20 章。丁俊(dingjun123) 编著了第4 章、第5 章、第6 章和第7 章。梁敬彬(wabjtam123) 编著了第2 章、第3 章、第13 章、第14 章、第15 章、第16 章和第17 章。怀晓明(lastwinner )编著了第12 章。贾书民编著了第7 章。卢涛(〇〇)编著了第8 章、第19 章,并对第2 章、第7 章的部分内容作了补充。
各章的主要内容如下:
第1 章“大话数据库编程规范”通过风趣的语言讲解了Oracle 开发过程中的书写规范、命名规范、变量命名、注释规范、语法规范、脚本规范的一些规则和建议。
第2 章“Oracle 开发常用工具及使用” 的“AWR 工具与性能优化” 一节描述了AWR 的基本功能和使用步骤,并通过几个经典案例的演示让读者加深了印象,同时证实该工具的强大。“SQL_TRACE/10046 事件” 一节描述了如何通过该工具了解SQL 的解析过程、执行计划、绑定变量、递归调用等详细信息。最后通过系列10046 事件跟踪的成功案例来阐述该如何一步一步打开各扇SQL 困惑大门。“ 计时和剖析工具” 一节主要介绍了利用DBMS_PROFILER 包分析PL/SQL 代码的方法和步骤,并根据剖析结果对代码进行精细地调整。
第3 章“ 探索MERGE 方法” 介绍了MERGE 存在的原因、具备的特性及那些注意点,通过实例讲述了MERGE 用于复杂更新时的优势所在,希望读者能记住这些经典的方法,给自己的项目开发带来便利。
第4 章 神秘的NULL 和令人讨厌的CHAR 分两部分,第1 部分通过大量的实例分析NULL 的理论和使用,使读者对NULL 了然于胸,从而更好地使用NULL 。第2 部分通过对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,PL/SQL 的使用方法和技巧。
第10 章“趣谈Oracle 分析函数”讲述了分析函数在BI 场景中的一些应用以及自定义聚集函数的实现。
第11 章“Oracle 层次查询”介绍了基本的层次查询语法SELECT...START WITH... CONNECT BY ... 语法、以及SYS_CONNECT_BY_PATH 和WMSYS.WM_CONCAT 函数的应用。
第12 章 号段选取 主要利用层次查询和分析函数,通过对常见的号段选取的四种情况进行剖析解答,并通过 扩展环节拓展了这几种情况的应用范围,循序渐进带你全面掌握此类问题的攻克方法。
第13 章“ 分析SQL 执行计划的关注点” 并未对各种调优知识进行特别深入的描述,而是将最实用部分提炼出告之读者,力求读者在读完本章后能面对纷繁复杂的执行计划而保持清晰的头脑,以最敏锐的视角去关注最需了解的信息,从而能迅速准确抓出主要矛盾,快速解决问题。
第14 章“Oracle 开发误区探索” 来源于日常工作中开发人员所经历的各个易错环节,具有较强的隐蔽性和欺骗性,希望读者在阅读完本章后能借鉴经验,在项目开发中少犯错。
第15 章“PL/SQL 开发性能漫谈” 主要从重视解析、关注调用、简洁为王、细致入微四个角度入手,结合详细的案例说明和读者共同探索PL/SQL 开发优化的方法和思想。
第16 章“ 管道函数的学习与实战应用” 结合详细的示例描述了管道函数的特性、注意点、使用管道函数的场合等知识点。适当的使用管道函数技术将给项目开发带来很大的便利。
第17 章“ 巧用锁特性避免重复启动同一程序” 来源于笔者项目中一次未考虑周全而导致系统数据错误的经验教训,文中描述的技术方案是将锁机制和异常捕获巧妙结合,完美的解决了笔者的问题,并成功将该技术广泛的应用到各个项目中。
第18 章介绍11GR2 的新功能:递归WITH 子查询。本章中的大部分例子看起来像是趣味数学题,似乎实用性不强,读者们不妨视之为工作之余放松脑筋的益智类游戏,并从中得到某些启发。也许在你解决下一个工作中的难题时,递归的思想就会大放异彩!
第19 章“ 不可能的任务,挑战Oracle” 讲解了用Oracle 内部和第三方过程语言实现数据立方体的方法及提高效率的优化方法,说明了在特定条件下,不用SQL ,而采用高级语言编程解决高性能要求问题的必要性和可能性。
第20 章“动态SQL 扩展”通过一些翔实的案例讲解了动态SQL 的不同应用场景。
书中案例的基本运行环境是Oracle 10g R2 ,除非有特殊说明,在Oracle 9i 中也能运行。个别Oracle 11g 的新特性都专门指出。
本书在很多案例的重要部分都有提示、注意等特殊说明。目的是为了加深读者的印象,避免不必要的错误,以使读者能够更高效地利用Oracle 强大的功能和开发工具。
感谢 ITPUB 网站的创始人黄志洪(tigerfish) 为本书写序,他在推动中国Oracle 数据库的发展上功不可没。本书正是在他的倡议和帮助下完成的。
感谢 杨廷琨(yangtingkun )、罗海雄(rollingpig )、张涵(zhangfengh )、杨向勇(yxyup )和 侯圣文(secooler ),他们都是国内顶尖的Oracle 专家,感谢他们审核了书稿,并提出了宝贵意见。
感谢 ITPUB 的王蓓小姐(贝贝),在本书的出版过程中,她做了大量的协调工作,才保证这本书的顺利出版。
感谢梁敬弘博士对梁敬彬的章节作的仔细修改。
感谢电子工业出版社的张月萍策划和 许艳编辑 ,是她 们 的努力让本书更具可读性和完整性。
由于作者水平有限,书中难免还存在一些错误和不当之处,敬请批评指正。
编者
2010 年8 月