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


75

在MySQL数据库上下文中,这3个术语有什么区别:

  • 存储过程
  • 存储功能
  • 存储例程

像那些日期时间功能(例如WEEKDAY()等)之类的内置功能也被认为是什么?


3
相关答案:MySQL存储过程与函数,我在改善答案的同时找到了链接,因此建立了链接:)
Grijesh Chauhan 2013年

存储过程和函数都是数据库对象,其中包含语句集。另一方面,存储过程是预编译的,每次调用时都会编译函数。函数必须具有返回值,但对于过程而言,它是可选的。在存储过程中,可以使用INSERT,UPDATE,DELETE,但在功能上只能使用SELECT语句。
米罗斯拉夫·萨维尔

Answers:


89

Google是您的朋友。“ mysql例程功能过程”的第一个匹配项是:http : //dev.mysql.com/doc/refman/5.0/en/stored-routines-syntax.html

快速总结:

存储的例程可以是过程,也可以是函数。

使用CALL语句调用过程,并且只能使用输出变量传回值。

可以像其他任何函数一样从语句内部调用一个函数,并且可以返回标量值。


23
虽然我同意RTFM的观点。谷歌现在使用此答案来显示内联结果。
现实

51

在这里,我试图总结功能和过程之间的区别:

  1. FUNCTION始终使用return语句返回一个值。PROCEDURE可以通过参数返回一个或多个值,或者根本不返回任何值。
  2. 函数通常用于计算,而过程通常用于执行业务逻辑。
  3. 函数仅返回1个值。过程可以返回多个值(最大1024)。
  4. 默认情况下,存储过程始终返回零的整数值。而函数返回类型可以是标量或表或表值。
  5. 存储过程有一个预编译的执行计划,而函数则没有。
  6. SQL语句可以直接调用函数,SELECT func_name FROM DUAL而过程则不能。
  7. 存储过程具有安全性并减少了网络流量,而且我们可以一次在任意数量的应用程序中调用存储过程。
  8. 函数可以在SQL查询中使用,而过程不能在SQL查询中使用。这导致功能和过程之间的重大差异。

30

MySQL函数和mysql过程的区别

MYSQL功能

它必须返回值。INOUTINOUT不能在function.But返回的数据类型使用时创建功能必须申报。可以从SQL语句调用该函数。函数返回一个值。

MYSQL程序

返回值不是强制性的,但可以使用OUT参数来返回过程。可以使用IN| OUT| INOUT参数。无法从SQL语句调用过程。过程使用OUTINOUT参数返回多个值。


5

程序与功能

1.  PROCEDURES may or may not return a value but FUNCTION must return a value
2.  PROCEDURES can have input/output parameter but FUNCTION only has input parameter.
3.  We can call FUNCTION from PROCEDURES but cannot call PROCEDURES from a function. 
4.  We cannot use PROCEDURES in SQL statement like SELECT, INSERT, UPDATE, DELETE, MERGE etc. but we can use them with FUNCTION.
5.  We can use try-catch exception handling in PROCEDURES but we cannot do that in FUNCTION. 
6.  We can use transaction in PROCEDURES but it is not possible in FUNCTION.

2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.