Skip to content

38.4. 用户定义的过程#

过程是与函数类似的数据库对象。主要区别在于

  • 过程使用 CREATE PROCEDURE 命令定义,而不是 CREATE FUNCTION

  • 过程不返回函数值;因此 CREATE PROCEDURE 缺少 RETURNS 子句。但是,过程可以通过输出参数向调用者返回数据。

  • 虽然函数作为查询或 DML 命令的一部分被调用,但过程使用 CALL 命令独立调用。

  • 过程可以在执行期间提交或回滚事务(然后自动开始一个新事务),只要调用 CALL 命令不是显式事务块的一部分即可。函数无法做到这一点。

  • 某些函数属性(例如严格性)不适用于过程。这些属性控制函数在查询中的使用方式,这与过程无关。

以下部分中关于如何定义用户定义函数的说明也适用于过程,但上述要点除外。

函数和过程统称为例程。有诸如ALTER ROUTINEDROP ROUTINE等命令,它们可以在函数和过程上操作,而无需知道它们是什么类型。但请注意,没有CREATE ROUTINE命令。