过程是类似于函数的数据库对象。主要差别是
过程利用 CREATE PROCEDURE
命令定义,而不是 CREATE FUNCTION
。
过程不会返回函数值;因此 CREATE PROCEDURE
没有 RETURNS
子句。但是,过程可以通过输出参数向调用者返回数据。
当函数在查询或 DML 命令中调用时,使用 CALL
命令隔离调用过程。
在过程执行期间可以提交或回滚事务(然后自动开始一个新事务),只要调用 CALL
命令不是显式事务块的一部分即可。函数无法执行此操作。
某些函数属性(如严格性)不适用于过程。这些属性会控制如何在查询中使用函数,这与过程无关。
以下各部分中关于定义用户定义函数的说明也适用于过程,上述几点除外。
函数和过程通常也称为例程。有些命令(例如 ALTER ROUTINE
和 DROP ROUTINE
)可在函数和过程上进行操作,而无需知道它们是什么类型的。但请注意,没有 CREATE ROUTINE
命令。