第一图书网

剑破冰山

卢涛 电子工业
出版时间:

2011-1  

出版社:

电子工业  

作者:

卢涛  

页数:

520  

Tag标签:

无  

前言

本书是ITPUB技术丛书中第一本专注于Oracle开发的书籍。长久以来,数据库后台开发一直是应用开发行业的一项核心工作,能否正确设计一个数据库的架构,并写出合理、高效的SQL,决定了一个应用的效能,也在相当大的程度上影响了项目的成败。而在表象的背后,数据库开发又远远不止表面看到的那么简单,用作者们的话来说只是冰山一角。除了SQL或PL/SQL以外,我们还可能面对算法、架构、规范等问题。作者们都曾经在各行业的第一线战斗过,长期从事数据库开发各个方面各种细节的工作,由他们去分享10多年来的心得,对于读者来说是极好的知识共享。以前ITUB技术丛书中有许多关于数据库管理的内容,由于所提供的案例许多属于极端而难以重现,但这本书里的很多例子,读者都可以很简单地重现并且自我尝试,领会其中的精粹,这也是本书和以前DBA方面书籍的一大差异之处。我和本书的作者们大多在ITPUB上相识了很长时间,他们都是具有丰富行业经验的专家,也非常热心。苏旭晖(newkid)和卢涛Oracle是开发方面的行家,记得当初我在社区里推崇JoeCelko的《S0LipuzzlesandAnswers》一书,结果newkid很快指出这本书里的例子的很多错误或者愚笨之处,还专门给出一个帖子来指出书中的错误,让人叹服。他对技术精益求精,非常关心国内的开发社团,解决了许多网友提出的疑难的实际问题,还经常订购国内原创的技术书籍。有一次newkid君在论坛上出了一道用SQL去求解四皇后问题的题,不久oo就给出了答案,我才第一次知道SQL除了可以用来查询数据外,还可以有这样的用途。王保强(bqwang)、怀晓明(1astwinner)是:[TPUB中的元老级会员,bq在项目管理、数据库、数据仓库、系统wang架构应用上很有经验,在过去几年中一直担任大型开发项目的manager,而lastwirmer在应用测试和编码上的能力让人印象深刻,他是那种天生对问题有灵敏嗅觉的人,解决问题的能力非常强,并带队完成了几个大型开发项目。丁俊(dingiunl23)在电信领域有多年系统架构设计和管理经验,对Oracle数据库开发很有研究,梁敬彬(wabit123)对数据库管理、设计、开发均有较为深入的研究,同时有着多年的电信行业相关经验和丰富的培训经验,二人在社区中积极热心帮助别人解决疑难问题,并总结了很多精华内容,得到社区大众的认可。贾书民则早在20年前就开始使用Oracle数据库,参加了多个国家级项目的设计和开发,技术功底与行业经验相当丰厚。由这么多高手呕心沥血写出来的经验之作,我相信一定能让读者读后有所裨益。最后我要说从2004年ITPUB第一本技术图书面世以来,6年过去了,丛书也出版到第10本。2001年9月ITPUB刚刚建立的时候,会员只有一万多人,经过9年的发展,ITPIJB已拥有技术板块100多个,注册会员数量超过240万,每天更新的讨论帖数以万计。感谢苏旭晖、卢涛、王保强、怀晓明、梁敬彬、丁俊、贾书民在ITPUm即将步入第10个年头的时候,创作了这本重量级的技术图书。ITPUB的发展与这样的专家、第一线技术工作者的长期支持是分不开的,真挚感谢你们对ITPUB的支持!

内容概要

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开发版版主,15年IT工作经,2004年任高级工程师,在某数据管理中心任职系统分析师;曾参与数次全国数据处理系统的设计与实现。在软件开发、数据库开发和优化、系统架构、项目管理方面有一定研究。王保强,ITPUB数据仓库和MS SQL Setver版版主,曾获1TPUB最佳博客和ITPUB数据库大版最佳版主。11年IT工作经验,曾在多家国内外IT知名企业任职,在数据库开发和优化、数据仓库、系统架构、项目管理、Web20方面有一定研究。怀晓明,ITPUB 0racIe开发版等版块版主,获得第一届ITPUB最佳建议奖。在多个大型IT企业多年的工作历练中,积累了大量的系统架构设计经验,擅长数据库和Web的设计、开发,精于故障诊断与处理,具有丰富的省部级电子政务行业工作经验及项目管理经验。贾书民,1988年毕业于中国人民大学信息系,1991年获得高级程序员资格,1998年任高级IT程师。多年来,从事UNIX系统管理、数据库系统管理与设计、统计数据处理软件开发等工作,主持了河北省多项大型普查的数据处理工作,曾参加了多个国家级项目的设计和开发。

书籍目录

第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)许多开发者在Oracle数据库中建立后台进程从管道(一种数据库:IPC机制)读消息,这些后台进程执行管道消息中包含SQL,并提交工作。这样做是为了在事务中执行审计。即使更大的事务(父事务)回滚了,这个事务(子事务)也不会回滚。但是实际上Oracle自治事务的特性已经提供了此功能。自治事务只需要一行代码,但是那个后台进行为了实现这个功能却写了大量代码。(2)某些开发者在插入某张表的时候,为了确保某列的顺序唯一性,采用插入variable+1的方式。但是遇到了问题,系统经常出现主键冲突错误。这是因为系统是高度并发的,插入的数据用varaible+l的形式经常会出现重复值。为此,建议使用Oracle自带的工具sequence,它插入的时候会自动进行判断,所以不会出现重复值,而且sequence使用cache,还能极大地提高性能。(3)某些开发者在过程脚本中使用了create table temp,随后往temp表插入数据,最后又执行了tnmcate table temp。可以看出,该temp表是被用来作为中间表临时存储数据的,处理完后就被删除了。该过程脚本中出现大量类似的语句,由于并发问题,经常出现表冲突或数据冲突的错误,执行速度也不快。其实只要将create table temp改为create global temporary table,也就是生成Oralce真正的临时表,就能解决该问题。因为无论是基于会话还是基于事务的模式,其余会话都看不到这个表的数据存在,各个会话都可以跑这个过程,或使用同样的临时表名,但是绝对不会出现冲突。而且,在会话或事务结束后,该表数据自动会清零,根本无须去手动tnlncate。

后记

谈OracIe开发学习方法和学习经历Oracle开发学习方法感谢大家阅读本书,如果你能中本书从获取一些有用的知识,这是对我们最大的鼓舞。在全书内容完毕之际,还是老生常谈,长篇大论一番Oracle开发的学习方法,本部分最后会精选相关作者的学习经历供大家参考。虽然本书主要内容是偏向于开发的,但是若想深入Oracle管理或开发,要经历的过程是很相似的,Oracle知识体系庞大,如何有选择地学习Oracle的核心内容是非常重要的,只有掌握了Oracle的核心内容,才有可能更好地学习Oracle的其他内容。下面总结一下作者们的学习方法,以及学习过程中的一些思考,与君共勉(为了表述需要,前4点以第一人称“我”来叙述)。1.官方文档是王道在学习某一门技术过程中,首要必须先强调其官方文档的重要性。官方文档对这门技术会有比较全面和权威的阐述,如果开发人员或管理人员想当然地认为这门技术就应该提供某种功能,那么是不准确的。


编辑推荐

《剑破冰山:Oracle开发艺术》:ITPUB提供的主要资源:1.速度极快的论坛,多线路。高带宽,高稳定,方便各种线路条件的网友聚集讨论问题;2为每位注册会员提供免费的BLOG空问,可以最大限度地支持自定义模板风格;3定期在全国各大城市举办免费技术沙龙,为网友提供线下交流机会;4定期在全国各大城市举办技术培训,为网友提供提升个人价值的空间;5丰富的资料、软件、电子文档下载资源,帮助大家快速完成各项工作;6ITPUB出版的电子杂志和纸介质的技术丛书系列,汇集IT前沿的第一手经验心得,是从业人员的宝贵参考资料。

图书封面

图书标签Tags

广告

下载页面


剑破冰山 PDF格式下载



目前市面上能够买到的Oracle开发类的书籍都很初级,讲讲SQL语法、数据结构啦,而这本书包含了作者多年来对Oracle开发技术的开发工作经验,更难得的是书中很多例子都是真实的案例,阅读的过程彷佛就是在与高手一起解决问题的过程,值得一读!


能提升不少对oracle初级应用的能力,对于进阶有很大的好处


书拿到手,大致看了一下,不太适合初学者看,有一定的深度,从编码规范开始说起,对有一定数据库开发经验的人来说,值得入手,但是纸张有点。。。呵呵


带有示例的SQL开发的经验介绍,值得阅读,推荐。


讲的很不错,个人因为平时接触SQL优化比较少,习惯差,这本书到处都 在从性能分析,对培养习惯有好处,也很喜欢分析函数这一部分内容,比较新


看看阵容倒是蛮强大


因为作者们的无私帮助采买书的,书写的也挺好的,赞


内容大致浏览下,比较贴近实战!送货速度真是太快了,昨天下单,今天就收到了!


很赞的书,编写这本书的人,也都是论坛上的热心人,很好。


还没看,朋友有一本,挺不错的


一直在看,反复看了好几遍。


书很实践性


dadaw


好书,值得一看,众多大牛经验谈


在图书馆看了四章,回家就下订单了。好书值得好好口味。


挺不错,朴实耐用有内容。


此书适合对oacle有一定实践经验的读者,对开发有一定帮助。


标准高效的开发,版主经验的总结,值得一读


大概翻了一下,里面的知识点介绍的很详细,如果想多SQL了解更多的话,可以看看这本书,这本书中含有作者的经验,受益匪浅啊。


看了下,还不错,等后续看完再详细评论


大概看了下,还挺不错的


终于买到了。在论坛上是不错的书呢。


比较实用,有启发


单位订购的,感觉还可以吧


宣传的有点虚,各个章节呼应很少,有拼凑的嫌疑,例子不够生动,只是代码的堆砌。


粗略的看了一下,感觉章节连接不太好。可能是多个作者的原因吧


送货速度很快,但是书本纸张有点差啦


封面都有点烂了。。。


carolchong,你就是个托儿,在**也发同样的评论。这本书和国内多数oracle原创书籍有一样的通病,词不达意,语焉不详。本书部分作者或许技术水平不错,但是表达能力实在不敢恭维,读起来极其晦涩;还有经验值很多,但原理描述不清甚至根本不提,结论难以让人信服。技术人员不能只顾埋头写代码,如果要写文章的话,真该在文字上下下功夫。


说不是太好,原因有三 1. 例子粗制滥造,感觉就像论坛中的帖子,应付了事,不像是写书; 2. 相信作者的技术功力,但写作水平不敢恭维 3. 这本书的排版不好,如同例子一样粗糙


carolchong,你就是个托儿。这本书和国内多数oracle原创书籍有一样的通病,词不达意,语焉不详。本书部分作者或许技术水平不错,但是表达能力实在不敢恭维,读起来极其晦涩;还有经验值很多,但原理描述不清甚至根本不提,结论难以让人信服。技术人员不能只顾埋头写代码,如果要写文章的话,真该在文字上下下功夫。


去年买的,很喜欢,也很有意义,值得购买学习


梁老师的书都非常棒,干货很多,讲解也非常生动,收获很大。


里面涉及的不适合初学者


首次在amazon上买书,感觉挺好!寄送时间快,书的质量挺好,寄送包装都挺好!唯一的缺憾就是书皮撕开了一个小口。


一直没时间仔细看,还算是可以吧


刚刚到手,还没看,大概就如目录所描述,蛮好的,正是需要的


ITPUB的经典图书。非常适合开发人员阅读,尤其是在oracle开发道路上需要提升和突破的人!很有指导意义!


这本书可能不会成为经典,但作者绝对没有糊弄读者的意思,反而是希望让读者真正了解高端开发的价值与意义。本人仅仅读了二、三章,但不得不对博大精深的oracle开发心生景仰啊。


看了多半吧,不是全部都能消化,但是很多内容确实写的很不错,推荐购买


书有价,知识无价,好书


很不错,大师就是大SHI


很好的Oracle书


直接有很多SQL语句的。


排版真乱


ITPub论坛Oracle开发板块的精品


很好 灰常值得一看


相关图书