动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.如何解决二级联接打不开的问题.
.解决震荡波补丁引起的Oracle不能.
.Oracle中的IEEE754数据类型.
.FLASHBACK TABLE对全文索引的影响.
.无备份丢失部分数据文件和控制文.
.oracle联机热备份的原理,及rman.
.PL/SQL的一些语法.
.如何估计undo表空间大小.
.一条SQL语句.
.Oracle数据库的后台进程管理技术.
.Linux Kernel核心中文手册(1).
.在unix下定时执行oracle的sql方法.
.如何在Oracle 中实现类似自动增加.
.关于排序、sort_area_size、临时.
.Windows NT平台下Oracle优化策略.
.Oracle学习笔记之二----查询.
.oracle10g_linux_install_config.
.oracle下架构的基础知识(入门阶级.
.Oracle数据库技术(37).
.简单谈谈Oracle 10G中的闪回恢复.

存储过程能不能用在我们的项目中的思考

发表日期:2008-2-9 |



  想想我们的项目里能不能用存储过程。
  
  不能:因为项目要涉及到不同的数据库,更多的是为了以后换库方便。在代码里直接写SQL语句进行查询。发生换库时,只要简单的换一下连接字符串就可以了。这叫以不变应万变,怎么讲呢,代码不变,数据库爱怎么变就怎么变换库可以灵活到什么程度,即使公司打算把Oracle项目换成Access做单机版也没有任何问题。
  
  能:存储过程的执行速度要快得多,一方面它不需要在业务服务器和数据库服务器之间折返,更因为它有一次编译,较投递 SQL语句而言,效率更高。况且Oracle可以用Java,C 编写更高效的存储过程,SQL Server 2005则可以使用 .net,毫无疑问,存储过程的速度比美名其曰的业务组件要快的多。
  
  一般人喜欢折衷。行嘛,既然二者都有理,我在适当的场合选择适当的技术,需要效率高的时候,我才用存储过程。
  
  我喜欢一边倒。既然存储过程效率高,为什么不用存储过程?
  
  为了实现一个很小的业务运算,需要把数据提过来,然后又投回去,需要把数据库的数据类型转换成程序语言的数据类型,做完这些无谓的工作之后,最后的效果却是抛回到数据库,只要想到这一点,我们为什么不使用存储过程而采用这种低效的方案。
  
  须知现在的问题背景和那个数据库山头林立的年代已经完全不同了。假如说数据库也存在阶段的话,那种能否支持存储过程都参差不齐的年代属于石器时代。目前的数据库,连mysql都要支援存储过程了,也就是说,它们基本上都在同一条起跑线。因此,无须考虑万一我写了存储过程,而“升迁”的目标数据库不支援存储过程的问题。
  
  但是,各种数据库的存储过程的编写方法并不一致。假如从SQLServer转移到Oracle,意味着几乎所有的存储过程都要重写。这是换库说在新时代的新说辞。这个说法是有事实凭据的,换库多麻烦,存储过程要全部重写。
  
  实际上这个问题很轻易解决——代码生成。做好一个存储过程的模板,将模板中的数据库类型标识换成"Oracle",重新生成一次便万事大吉了。既然不需要手工重写,这个说法自然也站不住脚。或者制做一种调和于主流数据库存储过程语言的中间语言也可以,一个简单的编译器将它转换为特定于某个数据库的语言。
  
  使用存储过程除了效率高之外还有其他优势:
  
  a) 业务规则脚本化。编写存储过程的SQL语句是一种业务规则的脚本,当业务规则发生变化时,无须对业务组件使用编译和替换的高超魔法——须知越高超越危险。存储过程将这个问题简单的化解。
  
  b) 可以直接应用数据库内置的权限治理。假如不使用存储过程,一个业务规则能不能运行,需要在业务组件里进行控制,因此业务组件中需要另起一套权限控制框架,这个框架和数据库本身的权限控制是同构的,正所谓叠床架屋,多此一举。而利用数据库的权限治理则从源头把关,直接安全。
  
  c) 语言纯粹。和在 .net/java代码中混杂数据库操控的笨拙代码相比,存储过程完全使用SQL语言,尽管各种数据库的方言有异。提取数据,处理数据,保存结果的工作用同一种语言融在一处,无疑属于更好的编程风格。这个问题可以类比于 ASP->Asp.Net,从代码混杂到各自纯粹。.net3.0 意图使用 DLink技术把 SQL 语言变成编程语言的一部分,想法是类似的。
  
  但相较于各自纯粹而言,那种在 VB里直接写 FROM SELECT WHERE的做法恐怕也不可取。虽然我完全支持 Class Employee 这种语言级别的 ORM。
  
  d) 便于移植。和以前数据库山头林立的年代不同,现在我们更不放心的是平台。假如我们使用 .net 平台,意味着我们放弃了传说中更坚强的Linux —— mono 恐怕还靠不住。假如我们使用 java,虽然得到了跨平台的好处,但是只能做 bs,而在 Windows平台又失去了 .net 所具备的高速度——后者是致命的。另外,假如客户需要一个对配置要求不高反应又不迟钝的 cs 程序,也许用 Delphi 更能符合用户的愿望。
我们通常要在 win32/.net/java 平台之间做出选择。而这种选择没有回头路可走。假如我们把数据库操作代码放在数据访问层,把业务规则代码放在业务层,一切都特定于某种平台了。相反,假如使用存储过程,业务规则部署于数据库中,数据访问层和业务层都只剩下一个壳,代码大为简化,使用任何平台的语言来改写都可以快速完工。想想看,一周的时间就可以在一个新平台写完前端,何乐而不为呢。
  
  e) 方便的使用数据库的事务机制。在程序语言中控制事务,无论哪个平台都有隔靴搔痒之感,而在纯粹的SQL语言则显得心应手,浑然一体。
  
  就我理解,像便于换库这种理由,从历史原因来考察,是软件开发伤口上的痛。这个问题一直到ODBC等等方案风行之后才得到解除。以前特定于某种类型的数据库的程序,升迁所花费的代价是非常昂贵的。这次大动荡给一代人投下了心理阴影,提到特定于某种数据库时,便产生一朝被蛇咬,十年怕井绳的惧怕心理。
  
  类似的事情还有函数嵌套函数。结构化程序设计中,一个要害性的观念就是功能独立,其程序功能被划分为多个独立的功能函数。但有些功能是受雇于另外的子功能的,并非第一级子功能。例如,通常一个递归会写成两块,一块发起递归,一块递归,在类似无嵌套函数的语言中,发起递归会变成一个函数,递归过程又作为一个函数,这两个函数地位平行。而在支持嵌套函数的语言中,递归过程可以实现为一个子函数,嵌入进发起函数。但是现在的语言多不支持嵌套,因为OO浪潮使人们畏惧结构化,即使本不相左的交集。唯最近微软披露的 .net 3.0 框架计划引入该机制,也许是Anders很怀念Pascal,当然,更大的可能是微软也意识到了这个问题。
上一篇:用imp 工具进行数据库备份及恢复 人气:696
下一篇:从SCN看热备份的原理 人气:512
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号