学习啦 > 生活课堂 > 生活小常识 > 存储过程和函数的区别

存储过程和函数的区别

时间: 称红1024 分享

存储过程和函数的区别

  存储过程和函数的区别你想知道吗?下面是学习啦小编给大家整理的存储过程和函数的区别,供大家参阅!

  存储过程和函数的区别

  存储过程和函数的不同之处在于:

  函数必须有一个且必须只有一个返回值,并且还要制定返回值的数值类型。存储过程可以有返回值,也可以没有返回值,甚至可以有多个返回值,所有的返回值必须由输入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: 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

存储过程和函数的区别相关文章:

1.自动输出SQLServer存储过程依赖列表到EXCEL文件

2.论文中页码怎么设置

3630458