MySQL 函数和存储过程之间最显著的区别是什么?


存储过程和函数之间最显著的区别在于它们的调用方式和用途不同。除此之外,存储过程和函数之间还有以下区别:

  • 存储过程不返回值。它通过 CALL 语句调用来执行操作,例如修改表或处理检索到的记录。

    另一方面,函数在表达式中调用,并直接将单个值返回给调用者,在表达式中使用。也就是说,函数在表达式中的使用方式与常量、内置函数或表列引用相同。

  • 我们不能用 CALL 语句调用函数。我们不能在表达式中调用存储过程。

  • 例程创建的语法在存储过程和函数中略有不同,如下所示:

CREATE
   [DEFINER = { user | CURRENT_USER }]
   PROCEDURE sp_name ([proc_parameter[,...]])
   [characteristic ...] routine_body

CREATE
   [DEFINER = { user | CURRENT_USER }]
   FUNCTION sp_name ([func_parameter[,...]])
   RETURNS type
   [characteristic ...] routine_body

proc_parameter:
   [ IN | OUT | INOUT ] param_name type

func_parameter:
   param_name type

type:
   Any valid MySQL data type

characteristic:
   COMMENT 'string'
   | LANGUAGE SQL
   | [NOT] DETERMINISTIC
   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
   | SQL SECURITY { DEFINER | INVOKER }

routine_body:
   Valid SQL routine statement
  • 存储过程参数可以定义为仅输入、仅输出或同时输入和输出。这意味着存储过程可以通过输出参数将值传递回调用者。这些值可以在 CALL 语句后的语句中访问。

    另一方面,函数只有输入参数。因此,尽管存储过程和函数都可以有参数,但存储过程参数的声明语法与函数不同。

  • 函数返回值,因此函数定义中必须有 RETURNS 子句来指示返回值的数据类型。此外,函数体中必须至少有一个 RETURN 语句将值返回给调用者。

    另一方面,RETURNS 和 RETURN 不出现在存储过程定义中。

更新于:2020年6月22日

4K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.