【发布时间】:2019-09-26 06:51:49
【问题描述】:
我对使用 CASE(或 IF)条件编写 Postgresql UPDATE 查询感到困惑。
预期行为:如果某个特定字段不为空,我必须引发异常并且不进行更新。 当前行为:我尝试了 CASE 和 IF 条件,但每次我遇到语法错误:SQL 错误 [42601]: ERROR: syntax error at or near "exception"。 想法:也许有一种方法可以通过向表格添加约束来达到相同的结果?
UPDATE public.SomeTable
SET Title = (
case when EndDate IS null
THEN 'new title'
ELSE raise exception 'Cannot update entity if EndDate is not null'
end),
Description = (
case when EndDate IS null
THEN 'new description'
ELSE raise exception 'Cannot update entity if EndDate is not null'
end)
WHERE Id=4
版本: x86_64-pc-linux-gnu 上的 PostgreSQL 11.5 (Debian 11.5-1.pgdg90+1),由 gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit 编译
【问题讨论】:
-
您不能在 SQL 查询中使用
RAISE。这是一个只能“独立”使用的 PL/pgSQL 语句 -
我认为您需要使用触发器来执行此操作。
-
注意:RAISE 影响(回滚)整个交易。您不能逐行提高。
标签: sql postgresql sql-update sqlexception