# 2F005 — function_executed_no_return_statement

> PostgreSQL SQLSTATE 2F005 的源码与诊断参考。
---

# 2F005

## 速览 {#at-a-glance}

SQLSTATE 2F005 是 SQL Routine Exception 类别中“函数执行时缺少 RETURN”的成员。固定的 PostgreSQL 18.6 PL/pgSQL 路径区分普通函数和触发器过程的消息。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `2F005` |
| 条件名 | `function_executed_no_return_statement` |
| 状态 | `有效` |
| 已知存在于 | `7.4` |
| 锁定快照 | `9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3` |
| 宏 | `ERRCODE_S_R_E_FUNCTION_EXECUTED_NO_RETURN_STATEMENT` |
| 别名 | `—` |

<!-- source facts: data/errcodes/2F005.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}

确认的消息是 `control reached end of function without RETURN` 和 `control reached end of trigger procedure without RETURN`。返回要求取决于例程种类和声明的返回行为；这不是笼统的“函数返回 NULL”消息。

## 消息 {#messages}

确认的消息是 `control reached end of function without RETURN` 和 `control reached end of trigger procedure without RETURN`。返回要求取决于例程种类和声明的返回行为；这不是笼统的“函数返回 NULL”消息。

## 诊断 {#diagnosis}

读取例程签名以及所有可能到达末尾的控制流。对于触发器过程，按触发器契约检查每个应返回触发器行或 NULL 的分支；对于返回值函数，检查每个分支是否都有兼容的 `RETURN`。

## 处理 {#response}

增加所需的返回路径，并在重做操作前验证例程定义。这是例程控制流修复；只有考虑过外层操作是否已经产生可见工作后，才决定重试。

## 版本 {#versions}

锁定目录将该条件的已知下界记为 PostgreSQL 7.4；事实块列出已发布快照，源码路径状态仅限于下方固定的 PostgreSQL 18.6 资料。

## 相关 {#related}

[`2F000`](../2f000/), [`38000`](../38000/)

## 来源 {#sources}

详见结构化[证据记录](../../data/evidence/2f005.json)，其中记录固定源码路径、扫描范围和未解决的运行边界。
