存储过程和存储函数之间的差异

本文译自CODE PROJECT的Differences between Stored Procedures and Functions,原作者: Sangunni。文章写得很好,很有学习意义,译的不好,还请大家指正。

先说明一下本文主要讲了“存储过程和存储存储函数之间的差异”。介绍前科普一下两者的大致含义:大家都知道”存储过程”和”存储函数”都是在MYSQL5.0版本中才加入的,早期的MYSQL版本并不支持。存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。一个存储过程是一个可编程的函数。存储函数是可以被存储在服务器中的一套SQL语句。一旦它被存储了,客户端不需要再重新发布单独的语句,而是可以引用存储函数来替代。这时二者含义上的差异。

下面通过译文来具体介绍:
— 正文开始 —

  • 存储过程可以返回0值或数值n,而存储函数可以返回一个值,这是强制性的。
  • 存储过程可以有它的输入/输出参数,而存储函数可以有唯一的输入参数。
  • 存储过程允许SELECT作为DML(Data Manipulation Language 数据操纵语言)在其中声明,而存储方法只允许SELECT在方法体中声明。
  • 存储过程可以调用函数,而存储过程不能被存储函数调用。
  • 存储过程可以处理异常try-catch模块,而存储函数中不能使用try-catch模块。
  • 我们可以在存储过程中处理事务管理,而在存储函数中不能。
  • 存储过程不能被应用在SELECT声明的语句中,而存储函数可以嵌入一个SELECT声明中。
  • UDF(User-Defined Function 用户自定义函数)可以使用在任何含有WHERE/HAVING/SELECT语句的SQL声明,而存储过程不能被使用。
  • UDFs(用户自定义函数)返回表结构可以被视为行集(记录)。这可以用来与其它表中进行JOIN。
  • 内联UDFs可以通过视图作为参数被调用并用户JOIN其他行集操作。

接下来深入介绍
存储过程(Stored Procedures)

  • 存储过程是一个程序(或过程)被物理地存储在数据库中。它们通常是指一个专有的数据库PostgreSQL的PL/SQL语言,如Oracle数据库或PL/PgSQL语言。一个存储过程的优点是,当它被执行时,响应用户的请求,由数据库引擎直接运行它,存储过程通常运行在单独的数据库服务器。因此,它可以直接访问操作它需要的数据,并只需要把结果返回给用户,常常用作处理来回传送大量数据的开销。
    用户自定义函数(User-Defined Function)

  • 用户定义的函数是一个常规的程序,通过一定的逻辑封装,并在其他查询请求中使用。然而视图被限制使用单个SELECT语句,用户定义函数可以有多个SELECT语句,并提供更有力的逻辑超过使用视图。
    用户自定义函数主要有三种分类:

    标值函数 - 返回一个标值,如整数或时间戳。可作为列名查询

    内联函数 - 可以包含单个SELECT语句

    表值函数 - 可以包含任意数量的语句执行结果作为变量返回。当你只需要返回多行,而不是将此行集作为在一个SELECT语句的逻辑处理。此时它们变得得心应手。

— 正文结束 —

通过上面对存储过程和存储函数的区别,想必大家都有一个初步的认识和了解,作为MYSQL的新功能,它是数据库的一个比较重要组成部分并且能方便我们解决处理大数据,我们应该在开发和学习过程中多应用这方面的知识,而不是简单的了解。

最后引用酷壳的一句话 ——真正让我们成为局域网的不是那个墙,而是我们自己的肤浅。

(The End)

坚持原创技术分享,您的支持将鼓励我继续创作!