为什么要用存储过程,什么时候要用存储过程

几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM
项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是
DBA,以前的项目都没有用到存储,不照样运行的好好的?

存储过程真的那么重要吗,它到底有什么好处呢?

笔者认为,存储过程说白了就是一堆
SQL
的合并。中间加了点逻辑控制。

但是存储过程处理比较复杂的业务时比较实用。
比如说,一个复杂的数据操作。如果你在前台处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话。就只有一次。从响应时间上来说有优
势。
也就是说存储过程可以给我们带来运行效率提高的好处。
另外,程序容易出现 BUG
不稳定,而存储过程,只要数据库不出现问题,基本上是不会出现什么问题的。也就是说从安全上讲,使用了存储过程的系统更加稳定。

数据量小的,或者和钱没关系的项目不用存储过程也可以正常运作。mysql
的存储过程还有待实际测试。如果是正式项目,建议你用 sql server 或 oracle
的存储过程。数据与数据之间打交道的话,过程会比程序来的快的多。面试官问有没有用存储过程,实际上就是想知道前来面试的程序员到底做过数据量大的项目没。如果是培训出来的,或者小项目小公司出来的,对存储肯定接触的少了。

所以,要想进大公司,没有丰富存储过程经验,是不行的。

那么什么时候才可以用存储?对于数据量不是很大以及业务处理不是很复杂的小项目就无需要了么?
错。存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其威力和优势主要体现在:
  1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般
SQL
语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
  2.当对数据库进行复杂操作时(如对多个表进行
Update,Insert,Query,Delete
时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL
语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
  3.存储过程可以重复使用,可减少数据库开发人员的工作量。
  4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

时间: 2024-10-18 05:46:01

为什么要用存储过程,什么时候要用存储过程的相关文章

oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)

这篇文章主要介绍了oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包等相关资料,需要的朋友可以参考下 oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,存储

Sql server中根据存储过程中的部分信息查找存储过程名称的方法【视图和Function】

1.查询的语句: select a.id,b.name,a.*,b.* from syscomments a join sysobjects b on a.id=b.id where b.xtype='P' and a.text like '%usp_cm%' b.xtype='P'指定在什么类型的范围进行搜索 '%usp_cm%'就是你能记得的存储过程中的内容. 2.查找类型: select distinct xtype from sysobjects 找到数据库中所有的对象类型 P是存储过程

mysql写存储过程/PHP写和调用存储过程

PHP调用MYSQL存储过程实例 来源: http://blog.csdn.net/ewing333/article/details/5906887 实例一:无参的存储过程 $conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!"); mysql_select_db('test',$conn); $sql = " create procedure myproce() begin INSERT IN

存储过程之一—建立简单的存储过程

一.存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户 通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.而我们常用的操作数据库语言SQL语句在执行的时 候需要要先编译,然后执行,所以执行的效率没有存储过程高. 存储过程优点如下: 重复使用.存储过程可以重复使用,从而可以减少数据库开发人员的工作量. 提高性能.存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译.一般的SQL语句每

使用系统存储过程实现的通用 分页存储过程 (转自邹建)

--使用系统存储过程实现的通用分页存储过程(转自邹建) CREATE PROC [dbo].[GetPageData] @sql ntext, --要执行的sql语句 @PageCurrent int=1, --要显示的页码 @PageSize int=10, --每页的大小 @PageCount int OUTPUT, --总页数 @sqlCountText nvarchar(4000) AS SET NOCOUNT ON DECLARE @p1 int --初始化分页游标 EXEC sp_c

C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: CREATE PROCEDURE sp_AccountRole_Create @CategoryID int, @RoleName nvarchar(10), @Description nvarchar(50), @RoleID int output AS DECLARE @Count int -- 查

存储过程3 带参数修改存储过程

in 输入参数 delimiter $ create procedure pro_findId(in  eid int ) begin select * from where id=eid; end $ delimiter ; 这样存储过程就创建好了 我们来执行以下 call pro_findid(2); 原文地址:https://www.cnblogs.com/qmk-716/p/9710485.html

kettle的“调取DB存储过程”插件(可以调取存储过程,函数)

首先明确一点"调取DB存储过程"这个插件既可以调取存储过程,又可以调取函数:函数和存储过程中的in的参数值不可以更改,out的可以更改:下面来一个实测:使用的数据库为oracle首先定义一个简单的存储过程create procedure test(jbgz in int,jj in int,gz out int) asbegingz:=jbgz+jj;--工资=基本工资+奖金:dbms_output.put_line('本月工资为:'||gz);end; 一个非常简单的转换: 然后再来

Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法

DELIMITER $$ USE `qrsoft_dyj_db`$$ DROP PROCEDURE IF EXISTS `proc_withdraw_approve`$$ CREATE PROCEDURE `proc_withdraw_approve`(IN p_apply_id INT,IN p_handleuserid INT,IN p_handlestate INT,IN p_handletype INT,IN p_bankreceipt VARCHAR(200),IN p_apply_m