选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / SQL 状态码 / Class 20 未找到 Case

20000 case_not_found

ERROR 源码确认 参考 未实测

类别
Class 20 未找到 Case
严重等级
ERROR
条件名
case_not_found
宏名称
ERRCODE_CASE_NOT_FOUND
启用版本
8.4
状态
活跃

版本覆盖

速览

SQLSTATE 20000 在 PL/pgSQL 的 CASE 语句没有匹配任何 WHEN 且没有 ELSE 时报告。PostgreSQL 18.6 的消息是 case not found,hint 为 CASE statement is missing ELSE part.。该条件属于过程式 CASE 语句路径,不是普通查询返回零行的结果。

含义

执行器路径位于 src/pl/plpgsql/src/pl_exec.cexec_stmt_case。它执行搜索式或简单过程式 CASE 语句,在到达缺失 ELSE 的分支时报告 20000。SQL CASE 表达式语义不同,因此应先确认语句形式和例程源码,再修改查询。

消息

固定消息是 case not found;hint 为 CASE statement is missing ELSE part.

报文模板

源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。

主消息 case not found
HINT CASE statement is missing ELSE part.

来源:src/pl/plpgsql/src/pl_exec.c @ REL_18_6

诊断

找到 routine context 指出的 PL/pgSQL 例程和 CASE 语句。列出选择值或谓词的可能结果,确认每个预期路径都有 WHEN,再检查是否遗漏 ELSE。不要用行数检查或 SELECT INTO STRICT 的诊断替代这个条件。

处理

增加实现预期回退行为的 ELSE 分支,或使 WHEN 谓词覆盖所有可能值,并用代表性选择值验证例程。如果缺失分支代表无效业务输入,应由该分支有意报告应用条件。修改例程后,只有确认周围事务的副作用已回滚或业务操作具备幂等性时,才重新执行事务。

版本

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

来源

证据

断言

每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。

  • 20000 is case_not_found in SQLSTATE Class 20.

    核实方式Read the fixed errcodes definition row, severity, and macro.

    来源src/backend/utils/errcodes.txt

  • The fixed PostgreSQL 18.6 source contains the report path and message context described on the page.

    核实方式Read the complete source context around the resolved report group.

    不覆盖This is source confirmation, not a runtime observation in this batch.

    来源src/pl/plpgsql/src/pl_exec.c

  • The locked release definitions establish catalogue presence from the known 8.4.0 boundary; they do not establish a precise introducing release or runtime use.

    核实方式Compare canonical release-definition facts with the available history boundary.

    不覆盖Definition presence is not an emitting-path observation.

    来源src/backend/utils/errcodes.txt

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 20 未找到 Case Case Not Found 1 个
20000 case_not_found ERRCODE_CASE_NOT_FOUND ERROR 8.4
PL/pgSQL 的 CASE 无匹配分支且缺少 ELSE。 活跃