oracle数据库:Oracle数据库编写PL/SQL代码经验谈

="t18"> 我从1990年就开始编写PL/SQL代码这意味着我已经编写了几万行软件Software代码但我确信其中绝大多数代码都非常拙劣而且难以维护 幸运地是我发现找到并遵循编写出更好代码新思路方法还为时不晚就是在去年代码质量有了显著改进;这些改进主要是由于制定了些简单规则并像纪律样加以遵守 所有工作都独自完成 我们很少有人是孤立工作;大多数PL/SQL开发工作是在相对较大机构中进行但我们基本上还是在自己小隔间里用自己设备独自工作几乎没有PL/SQL开发小组进行正规代码复查或系统测试 我不可能通过这篇文章改变你们开发小组基本状态因此我仔细地选取出以下几点建议实施其中任何点并不需征得治理人员同意不论你小组是大是小都不必让其中每个人都赞同这些编码规则你只需按以下建议来改变你本人编码方式: 1. 严格遵循命名约定似乎它们就是你生命支柱 2. 戒除编写SQL嗜好:编写SQL越少越好 3. 使执行部分短小:离别"意大利面条式代码" 4. 找位伙伴:非常赞同找个人来监督你工作 1. 遵循命名约定 假如你建立并严格遵循套命名约定非凡是对于应用组件你就可以节省很多时间 当然遵循命名约定想法并没有什么新意你可能已经听烦了所以我并不提出什么宏伟命名计划而是给出些非常具体而明确约定然后证实这些约定会多么有用 前几个月我直在为PL/SQL开发人员设计、构建种新工具它名为Swyg(可以在www.swyg.com中找到)可以帮助员完成代码生成、测试及重用工作它具有几个独特组件我为每个组件指定了个由两个字母组成缩写名称如下所示:
     SF-Swyg基础部件   SM-Swyg元数据   SG-Swyg生成   SL-Swyg代码库   ST-Swyg单元测试  



  于是我便遵循表1中命名约定同时使用这些缩写遵循这些约定有什么好处呢?般来讲假如我要求命名规则我就可以更流畅更高效地编写代码 明确地说这些约定具有可猜测性意思是说我编写SQL能生成有用脚本例如通过使用表1中约定可以生成Swyg中所有基础包安装脚本执行这些工作SQL*Plus脚本如清单1所示这类脚本非常有用它意味着我不必手动维护安装脚本当我向Swyg方案中增加另个表并生成组相关包时我只要运行我脚本更新后安装脚本便会跳出来 2. 戒除编写SQL嗜好 编写SQL越少越好这似乎和我们直觉不太对于PL/SQL开发人员来说这是个奇异建议PL/SQL主要优点的就是可以毫不费力地在代码中编写SQL语句不过这种简易性也是这种语言个致命弱点 可以将纯粹SQL语句直接置于PL/SQL代码中而无需JDBC或ODBC的类中间层因此无论何时何地PL/SQL开发人员只要需要SQL语句他们通常就会向其应用代码中嵌入SQL语句那么这样做有什么问题吗? 在PL/SQL代码中到处使用SQL语句必然会导致以下后果: 尽管实际表现区别但同逻辑语句仍会出现重复从而导致过多语法分析且难于优化应用性能 暴露商务规则和方案这直接在SQL语句中包含了执行商务规则逻辑这些规则总在变化所以应用维护成本会急剧增加 当然你要编写个PL/SQL应用几乎都是基于基础表和视图你需要执行SQL语句问题不在于是否执行而是何时执行、如何执行 假如你对数据结构进行封装或者将它们隐藏于个PL/SQL代码层(通常是个代码包)的后那么你应用将会更健壮而且你还会发现创建和维护变得更易多了 我们来看个简单例子 假定我需要编写个处理某员工工作件事是获取该员工全名定义为"姓名逗号()姓";然后我可以进行具体分析清单2给出了这种情况下我很可能要编写这类代码个举例 切似乎都是这么简单和直接;这些代码可能会有什么呢?实际上真是非常糟糕最主要是我暴露了个商务规则:全名结构我可能要花费数小时来对此代码及其所基于应用进行测试但就在它刚刚投入使用时我才知道客户会不断地打电话告诉我实际上他们全名应该表示为"名空格姓" 现在如何办?搜索所有位于引号内单个逗号? 现实解决方案是使用隐藏所有细节、只提供组预定义、猜测试及预优化并能完成所有任务清单3为基于封装代码重新编写process_employee过程hr_employee_tp包提供了用于定义保存姓名局部变量类型;hr_employee_rp包含有基于种商务规则而返回全名 将显示PL/SQL语句灌入SQL代码很轻易同样谈论封装这些语句是如何重要也不费劲但另方面编写执行封装任务代码却具有挑战性;甚至是不现实生成这些包或许更有意义 几年前我曾帮助构建这样个生成段为PL/Generator现在由Quest Software公司拥有PL/SQL开发社区可以免费使用你可以从我网站WebSitewww.StevenFeuerstein.com/puter/gencentral.htm下载要知道其封装体系结构和我在前面所概括约定区别PL/Generator创建了个单独它包含了个表类型、查询和变化逻辑全部内容 当你不再编写太多SQL而是执行SQL无论你是生成还是编写自己定制封装应用都会受益匪浅

Tags:  oracle创建数据库 oracle数据库恢复 oracle数据库备份 oracle数据库

延伸阅读

最新评论

发表评论