高效oracle编程.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高效oracle编程

高效Oracle编程 数据库项目失败的原因 数据库项目失败的最常见的一个原因是对数据库的实际认识不足,缺乏对所用基本工具的了解。黑盒方法是指有意让开发人员对数据库退避三舍,甚至鼓励开发人员根本不要学习数据库!在很多情况下,开发人员没有充分利用数据库。 数据库项目失败的原因 在构建前端所用的GUI工具或语言(如Java)方面,开发人员得到了充分的培训。在很多情况下,他们会有数周甚至数月的培训。 开发人员没有进行过数据库培训,多数人都没有数据库经验,所以并未理解如何使用核心的数据库构造(如各种可用的索引和表结构)。 开发人员力图谨守“数据库独立性”这一原则,但是出于许多原因,他们可能做不到。最明显的一个原因是:他们对于数据库没有足够的了解,也不清楚这些数据库可能有什么区别。这样一个开发小组无法知道要避开数据库的哪些特性才能保证数据库独立性。 开发人员遇到大量性能问题、数据完整性问题、挂起问题等(但这些应用的界面往往很漂亮)。 在OLTP中要使用绑定变量 不良的写法: select * from basetab where msisdn= select * from basetab where msisdn= 正确的写法: select * from basetab where msisdn=:1 在jdbc中使用preparedstatement 两种方式速度相差5倍以上! 绑定变量例子 不要频繁的commit 不正确的方法: insert into basetab values(….); commit; insert into basetab values(….); commit; …. 正确的方法: insert into basetab values(….); insert into basetab values(….); commit; 禁止在jdbc中使用AutoCommit 尽量用sqlload工具做话单入库 不需要用C++或JAVA程序写入库的应用 sqlload举例 sqlldr user/passwd control=user.ctl direct=y controlfile的例子 LOAD DATA? INFILE dept.dat? INTO TABLE DEPT? REPLACE? FIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY ? (DEPTNO,? DNAME,? LOC? )? 尽量使用一个sql处理 需求:从表中选择满足要求的记录插入表另一个表中。 不正确的方式: 用plsql写一个cursor,一条条从源表中读记录插入到目标表中。 正确的方式: Insert into othertab select * from orgtab where cond0 尽量使用一个sql处理 如果可能,尽量利用一条SQL语句完成工作。 如果无法用一条SQL语句完成,就通过PL/SQL实现(不过,尽可能少用PL/SQL!)。 如果在PL/SQL中也无法做到(因为它缺少一些特性,如列出目录中的文件),可以试试使用Java存储过程来实现。不过,有了Oracle9i 及以上版本后,如今需要这样做的可能性极小。 如果用Java还办不到,那就在C外部过程中实现。如果速度要求很高,或者要使用采用C编写的一个第三方API,就常常使用这种做法。 如果在C外部例程中还无法实现,你就该好好想想有没有必要做这个工作了。 不要用应用做数据较验 不正确的方式 在代码中较验数据 正确的方式 使用数据库中的约束如: Primary key Foreigne key Not null Unqiue check 在OLTP中不要使用大事务 不正确的方式 delete from logtab where dt to_date(‘2005-01-01’,’yyyy-mm-dd’) update subscribeinfo set …. where status=1; 正确方式 与时间有关的表要使用range时间字段分区表 限制事务大小,用应用保障完整性 时间分区表 create table smsmsginfo ( msgid VARCHAR2(21) not null, dt DATE, constraint PK_SMSMSGINFO primary key (msgid) ) partition by range (dt) ( partition dt1 val

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档