存储过程是类似于函数的数据库对象。其核心差异包括:
存储过程使用 CREATE PROCEDURE 命令定义,而非 CREATE FUNCTION。
存储过程不返回函数返回值;因此 CREATE PROCEDURE 没有 RETURNS 子句。然而,存储过程可以通过输出参数向调用者返回数据。
函数是作为查询或 DML 命令的一部分调用的,而存储过程则是通过 CALL 命令独立调用的。
存储过程在执行期间可以提交或回滚事务(随后自动开启新事务),只要外层调用的 CALL 命令不处于显式事务块内部。函数则不支持事务控制。
某些函数属性(如严格性 strictness)不适用于存储过程。这些属性控制函数如何在查询表达式中求值,这与存储过程无关。
除上述差异外,后续各节关于如何定义用户自定义函数的说明同样适用于存储过程。
函数和存储过程统称为例程(routines)。诸如 ALTER ROUTINE 和 DROP ROUTINE 等命令可以统一操作函数与存储过程,而无需区分其具体种类。但请注意,并不存在 CREATE ROUTINE 命令。