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 ...
これは、 plpgsql関数 または-で使用される 手続き型言語PL/pgSQL の 条件付き制御構造CASE
に関係します。 DO
ステートメント 。 SQLのCASE
式 と混同しないでください。別の言語!また、微妙に異なる構文規則もあります。
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
で終了する完全修飾ステートメントを使用して、ステートメントを閉じる必要があります。
ドキュメントによると、ELSE
ステートメントのCASE
キーワードはnotオプションです。上記のリンクから引用します:
一致するものが見つからない場合、
ELSE
ステートメントが実行されます。ただし、ELSE
が存在しない場合は、CASE_NOT_FOUND
例外が発生します。
ただし、空のELSE
を使用できます。
CASE
WHEN old.applies_to = 'admin' THEN
_applies_to := 'My Self';
ELSE
-- do nothing
END CASE;
これは、CASE
がオプションであるSQLELSE
式とは異なりますが、キーワードが存在する場合は、式も指定する必要があります。