2025年9月25日: PostgreSQL 18 发布!
支持版本:当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本:devel
不支持版本:12 / 11

36.4. 用户定义过程 #

过程(Procedure)是一种与函数(Function)相似的数据库对象。主要区别如下:

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

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

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

  • 过程在其执行期间可以提交或回滚事务(然后自动开始一个新事务),前提是调用的 CALL 命令不包含在显式事务块中。函数则不能这样做。

  • 某些函数属性(如 strictness)不适用于过程。这些属性控制函数如何在查询中使用,这与过程无关。

后续章节中关于如何定义用户定义函数的解释同样适用于过程,但上面提到的几点除外。

函数和过程统称为“例程”(routines)。存在诸如 ALTER ROUTINEDROP ROUTINE 之类的命令,它们可以对函数和过程进行操作,而无需知道它们是哪种类型。请注意,没有 CREATE ROUTINE 命令。

提交更正

如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步说明的地方,请使用此表格报告文档问题。