预发布版本文档。 PostgreSQL 19beta4 为测试版本,最终发布内容可能有所不同。
36.4. 用户定义的过程 #
过程是一个类似于函数的数据库对象。关键差异是:
过程是由
CREATE PROCEDURE命令定义,而不是CREATE FUNCTION。过程不返回函数值;因此
CREATE PROCEDURE缺少RETURNS子句。不过,过程可以通过输出参数向调用方返回数据。函数可以作为查询或 DML 命令的一部分被调用,而过程则通过
CALL命令单独调用。只要调用
CALL命令不是显式事务块的一部分,过程就可以在执行期间提交或回滚事务(随后会自动开始一个新事务)。函数则不能这样做。某些函数属性(例如严格性)不适用于过程。这些属性控制如何在查询中使用函数,与过程不相关。
后面章节中关于如何定义用户定义的函数的解释同样适用于过程,除了上面指出的那些点。
函数和过程统称为例程。有 ALTER ROUTINE 和 DROP ROUTINE 这样的命令可以操作函数和过程而不需要知道它们是哪一种。不过,要注意没有 CREATE ROUTINE 命令。