我们不能在 SQL
CASE
语句之外使用 SELECT
条件吗?
例如:
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 ...
这涉及过程语言PL/pgSQL
的条件控制结构CASE
,用于plpgsql函数或过程或DO
语句。CASE
表达式相混淆。不同的语言!语法规则略有不同。
虽然 SQL
CASE
可以嵌入到 PL/pgSQL 代码中的 SQL 表达式中(这主要只是 SQL 命令的粘合剂),但您不能拥有独立的 SQL CASE
表达式(这是无意义的)。
-- inside a 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
来关闭它。
ELSE
吗?PL/pgSQL
CASE
需要一个 ELSE
分支,如果到达时缺失,则会引发错误。 说明书:
如果没有找到匹配,则执行
语句; 但如果ELSE
不存在,则会引发ELSE
异常。CASE_NOT_FOUND
您可以使用空的
ELSE
:
CASE
WHEN old.applies_to = 'admin' THEN
_applies_to := 'My Self';
ELSE
-- do nothing
END CASE;
这对于 SQL
CASE
来说是不同的,其中 ELSE
是可选的。如果存在 ELSE
关键字,则必须给出表达式。如果没有 ELSE
,则默认为 NULL
。喜欢:
CASE WHEN old.applies_to = 'admin' THEN 'My Self'
-- ELSE null -- optional
END;