跳转到主要内容

22005 — error_in_assignment

PostgreSQL SQLSTATE 22005 的源码与诊断参考。

22005

速览

22005 是 error_in_assignment,表示赋值操作违反了目标变量的赋值契约。固定 PL/pgSQL 路径报告常量变量被赋值:variable "%s" is declared CONSTANT

字段
SQLSTATE 22005
条件名 error_in_assignment
状态 有效
已知存在于 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_ERROR_IN_ASSIGNMENT
别名

含义

固定 PL/pgSQL 路径报告常量变量被赋值:variable "%s" is declared CONSTANT

exec_check_assignable 会对 PL/pgSQL 变量、promise 变量和 isconst 为真的 record 执行该检查;record field 会递归检查父 record,而 row datum 本身可赋值。因此诊断时要结合 routine 上下文和报文中的 datum 名称。

报文

已确认分支以 ERROR 严重性报告 primary:variable "%s" is declared CONSTANT。固定源码没有 DETAIL 或 HINT。本页只有源码证据,没有自然运行观察。

诊断

读取 message 中的变量名和 routine 上下文;固定路径是 PL/pgSQL 常量赋值错误,不是一般类型转换错误。

处置

移除该赋值、在确需可变时调整声明,或写入另一个变量;先修正 routine 再重做业务操作。显式事务中,未捕获的 ERROR 会使事务失败,应回滚整个事务或回滚到调用前建立的保存点。若 routine 有意使用 PL/pgSQL EXCEPTION 块处理错误,则可由其子事务隔离;本页没有运行案例证明特定 handler 的行为。

版本

锁定目录从 7.4 记录该条件,并在列出的正式快照及 19beta3 中出现;固定源码覆盖为 PostgreSQL 18.6。

22000, 22001, 22003, 22004

来源

详见结构化的证据记录,其中列出固定源码链接与范围限制。