存储过程和函数的区别

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程和函数的区别
存储过程和函数的区别你想知道吗?下⾯是店铺给⼤家整理的存储过程和函数的区别,供⼤家参阅!
存储过程和函数的区别
存储过程和函数的不同之处在于:
函数必须有⼀个且必须只有⼀个返回值,并且还要制定返回值的数值类型。

存储过程可以有返回值,也可以没有返回值,甚⾄可以有多个返回值,所有的返回值必须由输⼊IN或者是输出OUT参数进⾏指定。

两者赋值的⽅式不同:
函数可以采⽤select ...into ...⽅式和set值得⽅式进⾏赋值,只能⽤return返回结果集。

过程可以使⽤select的⽅式进⾏返回结果集。

使⽤⽅法不同:
函数可以直接⽤在sql语句当中,可以⽤来拓展标准的sql语句。

存储过程,需要使⽤call进⾏单独调⽤,不可以嵌⼊sql语句当中。

函数中函数体的限制较多,不能使⽤显式或隐式⽅式打开transaction、commit、rollback、set autocommit=0等。

但是存储过程可以使⽤⼏乎所有的失sql语句。

存储过程种类
1系统存储过程
以sp_开头,⽤来进⾏系统的各项设定.取得信息.相关管理⼯作。

2本地存储过程
⽤户创建的存储过程是由⽤户创建并完成某⼀特定功能的存储过程,事实上⼀般所说的存储过程就是指本地存储过程。

3临时存储过程
分为两种存储过程:
⼀是本地临时存储过程,以井字号(#)作为其名称的第⼀个字符,则该存储过程将成为⼀个存放在tempdb数据库中的本地临时存储过程,且只有创建它的⽤户才能执⾏它;
⼆是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为⼀个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程⼀旦创建,以后连接到服务器的任意⽤户都可以执⾏它,⽽且不需要特定的权限。

4远程存储过程
在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使⽤分布式查询和EXECUTE命令执⾏⼀个远程存储过程。

5扩展存储过程
扩展存储过程(Extended Stored Procedures)是⽤户可以使⽤外部程序语⾔编写的存储过程,⽽且扩展存储过程的名称通常以xp_开头。

存储过程优缺点
优点
①重复使⽤。

存储过程可以重复使⽤,从⽽可以减少数据库开发⼈员的⼯作量。

②减少⽹络流量。

存储过程位于服务器上,调⽤的时候只需要传递存储过程的名称以及参数就可以了,因此降低了⽹络传输的数据量。

③安全性。

参数化的存储过程可以防⽌SQL注⼊式攻击,⽽且可以将Grant、Deny以及Revoke权限应⽤于存储过程。

简单讲:
1.存储过程只在创造时进⾏编译,以后每次执⾏存储过程都不需再重新编译,⽽⼀般SQL语句每执⾏⼀次就编译⼀次,所以使⽤存储过程可提⾼数据库执⾏速度。

2.当对数据库进⾏复杂操作时(如对多个表进⾏Update,Insert,Query,Delete时),可将此复杂操作⽤存储过程封装起来与数据库提供的事务处理结合⼀起使⽤。

3.存储过程可以重复使⽤,可减少数据库开发⼈员的⼯作量
4.安全性⾼,可设定只有某些⽤户才具有对指定存储过程的使⽤权
有⼀点需要注意的是,⼀些⽹上盛传的所谓的存储过程要⽐sql语句执⾏更快的说法,实际上是个误解,并没有根据,包括微软内部的⼈也不认可这⼀点,所以不能作为正式的优点,希望⼤家能够认识到这⼀点。

缺点
1:调试⿇烦,但是⽤ PL/SQL Developer 调试很⽅便!弥补这个缺点。

2:移植问题,数据库端代码当然是与数据库相关的。

但是如果是做⼯程型项⽬,基本不存在移植问题。

3:重新编译问题,因为后端代码是运⾏前编译的,如果带有引⽤关系的对象发⽣改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运⾏时刻⾃动编译)。

4:如果在⼀个程序系统中⼤量的使⽤存储过程,到程序交付使⽤的时候随着⽤户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果⽤户想维护该系统可以说是很难很难、⽽且代价是空前的,维护起来更⿇烦。

相关文档
最新文档