存储过程、函数和例程之间有什么区别?

80
在MySQL数据库上下文中,这3个术语有何区别:
  • 存储过程(stored procedure)
  • 存储函数(stored function)
  • 存储例程(stored routine)
此外,像日期时间函数(如WEEKDAY()等)这样的内置函数被认为是什么?

3
以下是需要翻译的内容:related answer: MySQL stored procedure vs function, 我在改进我的答案时发现了这个链接,因此进行了关联 :) - Grijesh Chauhan
存储过程和函数都是包含一组语句的数据库对象。存储过程是预编译的,而函数在每次调用时都会被编译。函数必须具有返回值,但对于存储过程来说是可选的。在存储过程中,您可以使用INSERT、UPDATE、DELETE语句,但在函数中只能使用SELECT语句。 - Miroslav Savel
5个回答

89

谷歌是你的朋友。"mysql routine function procedure" 的第一个匹配结果是这个:http://dev.mysql.com/doc/refman/5.0/en/stored-routines-syntax.html

简单总结如下:

存储过程可以是过程(procedure)或函数。

通过 CALL 语句调用过程,仅能使用输出参数返回值。

函数可像其他函数一样在语句内部调用,并返回标量值。


28
虽然我同意 "RTFM" 的态度,但这个答案现在被谷歌用来显示内联结果。 - Realistic

56

这里我试图总结函数和过程之间的区别:

  1. 一个函数始终使用返回语句返回一个值。过程可以通过参数返回一个或多个值,也可能完全不返回。
  2. 函数通常用于计算,而过程通常用于执行业务逻辑。
  3. 函数只返回1个值,而过程可以返回多个值(最多1024个)。
  4. 存储过程默认总是返回整数值0,而函数的返回类型可以是标量、表或表值。
  5. 存储过程具有预编译的执行计划,而函数没有。
  6. 函数可以直接由SQL语句调用,例如SELECT func_name FROM DUAL,而过程则不能。
  7. 存储过程具有安全性并减少了网络流量,我们可以在任意数量的应用程序中调用存储过程。
  8. 函数可以在SQL查询中使用,而过程不能。这导致了函数和过程之间的主要区别。

31

MySQL函数和存储过程的区别

MYSQL函数

必须返回值。无法在函数中使用INOUTINOUT。但创建函数时必须声明返回数据类型。函数可以从SQL语句中调用。函数返回一个值。

MYSQL存储过程

返回值不是强制性的,但可以使用OUT参数来返回存储过程的输出。可以使用IN | OUT |INOUT参数。存储过程不能从SQL语句中调用。存储过程可以通过使用OUTINOUT参数返回多个值。


5

过程与函数

  1. 过程可能返回值,也可能不返回值,但是函数必须返回值。
  2. 过程可以有输入/输出参数,但是函数只有输入参数。
  3. 我们可以从过程中调用函数,但不能从函数中调用过程。
  4. 我们不能在SQL语句中使用过程,如SELECT、INSERT、UPDATE、DELETE、MERGE等,但我们可以在函数中使用它们。
  5. 我们可以在过程中使用try-catch异常处理,但在函数中无法实现。
  6. 我们可以在过程中使用事务,但在函数中不可能。

2

存储过程中函数必须返回一个值,但是可以选择不返回(存储过程可以返回零个或多个值)。 函数只能有输入参数,而存储过程可以有输入/输出参数。 函数可以从存储过程中调用,但是存储过程不能从函数中调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接