日期:2014-05-17  浏览次数:21004 次

有了存储过程为什么还要用 SQL ?
我不是一个 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 而言需要每次都编译这个语句,但如果把这个语句用存储过程来取代,因为存储过程只需编译一次,所以在运行效率上这简单的查询的效率都会高于 SQL 。
但是不是说存储过程可以滥用呢?即能否,或者说有没有必要将一个简单的查询都写成存储过程呢?

------解决方案--------------------
存储过程的好处 是把数据库业务逻辑固化在数据库中 程序开发人员只需要理解到接口的程度(也就是进什么数出什么数)

坏处就是开发存储过程的人,一般以上都是对业务逻辑没有理解透彻,对事务管理没有足够认识,对并发/性能一知半解的人。

所以会经常发现,能够一条sql搞定的数据库操作,被人写成了一百多行的存储过程,其人还觉得自己很牛;
一个频繁数据操作的表,经常因为DDL操作被锁定
一个操作是违反事务逻辑的,用自治事务硬塞进去了,造成了数据逻辑错误。
------解决方案--------------------
这条是大问题,呵呵。
探讨

存储过程的好处 是把数据库业务逻辑固化在数据库中 程序开发人员只需要理解到接口的程度(也就是进什么数出什么数)

坏处就是开发存储过程的人,一般以上都是对业务逻辑没有理解透彻,对事务管理没有足够认识,对并发/性能一知半解的人。

所以会经常发现,能够一条sql搞定的数据库操作,被人写成了一百多行的存储过程,其人还觉得自己很牛;
一个频繁数据操作的表,经常因为DDL操作被锁定
一个操……

------解决方案--------------------
探讨

引用:

存储过程的好处 是把数据库业务逻辑固化在数据库中 程序开发人员只需要理解到接口的程度(也就是进什么数出什么数)

坏处就是开发存储过程的人,一般以上都是对业务逻辑没有理解透彻,对事务管理没有足够认识,对并发/性能一知半解的人。

所以会经常发现,能够一条sql搞定的数据库操作,被人写成了一百多行的存储过程,其人还觉得自己很牛;
一个频……

------解决方案--------------------
对于是否应该使用存储过程的问题,是一个由来已久的话题了。
本人观点,不建议大量使用存储过程。
------解决方案--------------------
ORACLE 能够用SQL解决的问题尽量使用SQL,ORACLE 对SQL语句的优化是可控的,并且ORACLE 推出许多优化SQL的方法,并对SQL做了很多的扩展。例如,层次查询,分析函数等等。
相对存储过程主要是面向执行过程,有利于对程序的封装,就像JAVA的接口。
------解决方案--------------------
探讨

引用:
大哥,难道你不觉得sql比存储过程用起来要容易的多吗?
一个简单的sql,有必要写存储过程吗?

存储过程本来就不是为了处理简单的sql而创造出来的,你干嘛背道而驰!
还有你了解存储过程的执行计划吗?谁告诉你存储过程处理sql非常有优势了,
你处理下动态sql试试,用存储过程处理的比拼接好后用sql执行要慢多了!
仁者见仁,智者见智!
……

------解决方案--------------------
居然还有这种问题。我无言了。

既然这样,我要问你:既然有面向对象语言C++了,为啥还要有C语言?为啥还有汇编语言?

现在还有个数据库系统叫NoSQL,你的梦想可以在它里面找到了。
我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html