前言
长久以来,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/10046事件”一节描述了如何通过该工具了解SQL的解析过程、执行计划、绑定变量、递归调用等详细信息。最后通过系列10046事件跟踪的成功案例来阐述该如何一步步打开各扇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 10g R2,除非有特殊说明,在Oracle 9i中也能运行。个别Oracle 11g的新特性都有专门指出。
本书在很多案例的重要部分都有提示、注意等特殊说明。目的是为了加深读者的印象,避免不必要的错误,以使读者能够更高效地利用Oracle强大的功能和开发工具。
感谢ITPUB网站的创始人黄志洪(tigerfish)为本书写序,他在推动中国Oracle数据库的发展上功不可没。本书正是在他的倡议和帮助下完成的。
感谢杨廷琨(yangtingkun)、罗海雄(rollingpig)、张涵(zhangfengh)、杨向勇(yxyup)和侯圣文(secooler),他们都是国内顶尖的Oracle专家,感谢他们审核了书稿,并提出了宝贵意见。
感谢ITPUB的王蓓小姐(贝贝),在本书的出版过程中,她做了大量的协调工作,才保证这本书的顺利出版。
感谢梁敬弘博士对梁敬彬的章节做的仔细修改。
感谢电子工业出版社的张月萍策划,是她的努力让本书更具可读性和完整性。
由于作者水平有限,书中还存在一些错误和不当之处,敬请批评指正。
编者
2010年10月