我不是一个 DBA 。我是做程序开发的。当然也是初出茅庐。呵呵。
之前查了下存储过程,大多都是对其的赞美但有一问题:
在应用程序中访问数据库的时候,是否应该优先考虑使用存储过程呢?
如果可以的话,应用中几乎所有的 SQL 都可以用“存储过程”来代替。
看了对存储过程的介绍后,我甚至有将简单的 “单表SELECT” 和 INSERT 语句,等等这些简单的 SQL 都改用存储过程的冲动。
像这样“疯狂”的使用存储过程就没有一些弊端吗?
------解决方案--------------------
SQL 是用来查询的,是面向集合的, PL/SQL 是的sql可以面向过程, PL/SQL的基本单位是块, 存储过程是一种命名的块
大量使用存储过程 1移植烦,2更新难,3编写要严谨
------解决方案--------------------
很简单,PL-SQL的引擎和SQL引擎的机制不同,解析代价不同,数据库对SQL的优化程度大于等于对PL-SQL的优化程度
你自己写个排序和order by 相比,你能比Oracle的效率高否,用 PL-SQL肯定不可能。
------解决方案--------------------
------解决方案--------------------
存储过程的好处 是把数据库业务逻辑固化在数据库中 程序开发人员只需要理解到接口的程度(也就是进什么数出什么数)
坏处就是开发存储过程的人,一般以上都是对业务逻辑没有理解透彻,对事务管理没有足够认识,对并发/性能一知半解的人。
所以会经常发现,能够一条sql搞定的数据库操作,被人写成了一百多行的存储过程,其人还觉得自己很牛;
一个频繁数据操作的表,经常因为DDL操作被锁定
一个操作是违反事务逻辑的,用自治事务硬塞进去了,造成了数据逻辑错误。
------解决方案--------------------
这条是大问题,呵呵。
------解决方案--------------------
------解决方案--------------------
对于是否应该使用存储过程的问题,是一个由来已久的话题了。
本人观点,不建议大量使用存储过程。
------解决方案--------------------
ORACLE 能够用SQL解决的问题尽量使用SQL,ORACLE 对SQL语句的优化是可控的,并且ORACLE 推出许多优化SQL的方法,并对SQL做了很多的扩展。例如,层次查询,分析函数等等。
相对存储过程主要是面向执行过程,有利于对程序的封装,就像JAVA的接口。
------解决方案--------------------
------解决方案--------------------
居然还有这种问题。我无言了。
既然这样,我要问你:既然有面向对象语言C++了,为啥还要有C语言?为啥还有汇编语言?
现在还有个数据库系统叫NoSQL,你的梦想可以在它里面找到了。
代码迷推荐解决方案:oracle存储过程,http://www.daimami.com/search?q=177537