【问题标题】:What's the differences between stored procedures, functions and routines?存储过程、函数和例程之间有什么区别?
【发布时间】:2011-02-10 11:10:07
【问题描述】:

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

  • 存储过程
  • 存储函数
  • 存储的例程

像那些日期时间函数(例如WEEKDAY() 等)这样的内置函数也被认为是什么?

【问题讨论】:

  • 相关答案:MySQL stored procedure vs function,我在改进答案时找到了链接,因此链接了:)
  • 存储过程和函数都是包含语句集的数据库对象。另一方面,存储过程是预编译的,函数在每次调用时都会被编译。函数必须有返回值,但对于过程它是可选的。在存储过程中可以使用 INSERT、UPDATE、DELETE,但在函数中只能使用 SELECT 语句。

标签: mysql terminology


【解决方案1】:

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

快速总结:

存储例程可以是过程或函数。

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

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

【讨论】:

  • 虽然我同意 RTFM 的观点。谷歌现在使用这个答案来显示内联结果。
【解决方案2】:

这里我试着总结一下函数和过程的区别:

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

【讨论】:

    【解决方案3】:

    mysql函数和mysql过程的区别

    MYSQL 函数

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

    MYSQL 过程

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

    【讨论】:

      【解决方案4】:

      过程与功能

      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.
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-08
          • 2020-12-24
          • 2015-09-25
          • 2015-10-20
          • 2010-09-18
          • 2018-06-21
          • 1970-01-01
          相关资源
          最近更新 更多