我们不能在SQL SELECT语句之外使用CASE个条件吗?

例如.:

CASE 
  WHEN old.applies_to = 'admin' THEN _applies_to = 'My Self'
  ELSE _applies_to = initcap(old.applies_to)
END
 _summary = _summary || '<li>Apply To: ' || _applies_to || '</li>';

我得到以下错误:

ERROR:  syntax error at or near "_summary"
LINE 86: _summary = _summary || '<li>Apply To: ' || _applies ...

推荐答案

这涉及procedural language PL/pgSQL中的conditional control structure CASE个,用于plpgsql functionsDO statements

虽然SQL CASE可以嵌入PL/pgSQL代码中的SQL表达式中(它主要是SQL命令的粘合剂),但不能有独立的SQL CASE表达式(这是胡说八道).

-- inside plpgsql code block:
CASE 
   WHEN old.applies_to = 'admin' THEN
      _applies_to := 'My Self';
   ELSE
      _applies_to := initcap(old.applies_to);
END CASE;

必须使用以分号(;)和END CASE结尾的完全限定语句来关闭它.

Answer to additional question in comment

根据文档,CASE语句的ELSE关键字是not可选的.我引用上面的链接:

如果没有找到匹配项,则执行ELSE条语句;

但是,您可以使用空的ELSE:

CASE 
   WHEN old.applies_to = 'admin' THEN
      _applies_to := 'My Self';
   ELSE
      --  do nothing
END CASE;

这不同于SQL CASE表达式,其中ELSE是可选的,但是如果关键字存在,也必须给出一个表达式!

Postgresql相关问答推荐

如何在Common Lisp中使用Postmodern在表更改时获得通知?

哪种数据类型是除法的结果?

如何删除Devtainer之前创建的PostgreSQL数据库?

将整数(以毫秒为单位的epoch时间)转换为PrimitiveDateTime

Prisma:获取连接的活动 Postgresql 模式的名称

使用psql的copy语句时如何压缩数据?

如何在 postgres 中查询键设置为空值的 jsonb 字段

如何在 spring/JPA 中记录表和列名以防数据库错误

我应该 Select 哪种数据类型?

处理 sqlalchemy 断开连接的更好方法

如何为 JavaEE 应用程序中的 PostgreSQL 热备设置配置连接故障转移?

在 PostgreSQL 中将时间转换为秒

是否有为 SQL Server 生成完整数据库 DDL 的工具? Postgres 和 MySQL 呢?

Postgres 删除表语法错误

postgresql 分组和内部连接

如何在 postgres 模式中列出关系

在 PostgreSQL 中使用 Cursors进行分页

如何使用 Django Migrations 重新创建已删除的表?

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ

没有函数匹配给定的名称和参数类型