暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
也谈SQL开发规范.pdf
278
13页
5次
2022-09-06
5墨值下载
也谈SQL开发规范
2009年春天的某日,我和销售同事一同拜访某四大行的华东数据中心,该行软件中心一位
副总给我们提出了这样的服务需求:“我们行每年都大量招收刚毕业的大学生从事开发工作,
他们普遍缺乏开发经验,能把SQL语句写出来实现业务功能就不错了,你们原厂能不能提供一
SQL开发规范,确保这些年轻开发人员的编程质量,不希望他们懂太多原理,他们只需要
严格照着规范做就可以了。”这是我职业生涯中第一次听到客户这种需求,不免联想到自己那
些年的优化实施经历,的确感觉很多开发人员都经常在重复犯一些低级错误,我曾一次次像抓
虫子一样揪出这些低级错误,感觉就是体力活。我也曾多次感慨SQL开发规范的重要性,甚至
也曾想若有一个自动化工具能一次性扫描出这些问题该多好。
可是,那天面对客户的需求,我又觉得压力山大,因为设计开发是一片天高任鸟飞、海
凭鱼跃的广阔天地,如何设计合理的开发规范既有效确保开发质量,同时又不限制广大开发人
员的创造力和想象力?在那个年代还鲜有同行从事这方面工作,可供借鉴的资料很少,Oracle
公司内部知识库也是无章可循,于是我决意主要基于自己当年的有限经历和经验梳理出一些基
础性开发规范,感觉还是无法包罗万象。
本文就将针对这个当下依然炙手可热的热门话题与同行们进行切磋,并发表自己的一家之
言,仅供同行们、客户们参考和借鉴。
1. 对客户现有开发规范的了解
当年该行领导非常开放和大度,先发给我一份该行技术人员已经编写的SQL编程规范供我
参考,并谦虚地让我提出改进建议,令我对客户在这个领域的现状、理念和需求等有了初步的
了解。以下就是我对该文档的粗浅认知:
注重应用编程的书写规范
首先,我感知客户的开发规范偏重于应用编程的书写规范,包括SQLPL/SQLCJava
各种编程中的命名规范、注释编写规范、语句格式化等。这种书写规范对性能提升没有直接帮
助,但在应用软件的可读性、可维护性、可管理性等方面起到了非常大的作用。
注重相关技术的规范化使
其次,我认为该规范注重相关技术的规范化使用,例如PL/SQL中尽量使%TYPEPL/SQL
中参数编写规范化、用户自定义函数编写规范化、存储过程编写规范化Package写规范
化、触发器编写规范化、CJava等宿主语言编写规范化等。同样地,这些规范化不能直接提
升应用性能,但确保功能准确实现,也对应用软件编写的规范化、可读性、可维护性、可
管理性等起到了非常大的作用。
安全性、出错处理等方面编写规范
该规范还在应用程序的安全性、出错处理等方面制定了规范化,例如在安全性方面规定
在应用程序中进DDLDCL操作,而是由DBA后台进行此类操作;在SQL语句中避免在数据对
象前添加属主信息等。在出错处理方面则规定了每条SQL语句都应检查SQLCODESQLERRM;在
应用程序中都应编写Exception出错处理段等。
针对联机交易和批处理应用的不同技术运用规范
该规范还针对联机交易和批处理两类不同应用系统特点,提出了不同的编程规范。针对
机交易应用,该规范提出了通过rownum列函数限制返回记录数;尽可能避免使用GROUP BY
ORDER BYDISTINCTUNION操作,或者设置一个保存中间层次统计数据的临时表;在显示之
前进行COMMIT使事务模块化,避免锁的产生;把级联DELETE减到最小;降低过于活跃的数据
区域带来的负面影响;有效使用Sequence通过WHERE CURRENT OF游标选项进行删除和修改而
不是用独立的UPDATEDELETE语句,等等。
针对批处理应用,该规范提出了谨慎使用并行处理技术;慎重使用LOCK TABLE;在批处理
修改程序中周期性地进行COMMIT;合理设计满足业务逻辑的事务;合理设计批量业务逻辑,确
保全部进行批量重跑,或者从某个节点开始批量续跑。
提升性能的规范
该规范非常重视应用软件性能的提升,为此制定了很多确保性能的开发规范,包括充分使
用绑定变量;充分运用Oracle内置的方法和函数,而不要在应用程序中实现这些功能;慎重使
用动态SQL语句;避免不同类型的变量比较和运算;合理编写existinnot existnot in
等子查询;尽可能降低表的连接量;索引设计规范;防止索引失效的编写规范;算数运算编写
规范;FROMWHERE中的顺序编写规范;限制被选择的数据;使用FETCHBULK COLLECT INTO
语句批量提取规范;返回单行值的SELECT和游标编写规范;排序操作编写规范;排序操作中控
NULL值顺序的编写规范UNION与多列谓词‘OR的编写规范,等等。
2. 对客户现有开发规范的认知
众所周知,IT统可分为功能性和非功能性两个领域的实现目标,所谓功能性目标就是
过应用开发实现业务需求,而非功能性目标则包括高性能、高可用性、可管理性、扩展性、安
全性等目标。上述客户现有规范中的书写规范、技术运用规范等应该属于功能性目标范畴,而
在非功能性目标方面,客户对安全、管理等方面目标显然没有对性能目标的优先级那么高。
of 13
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜