使用 "case when" 和 "else" 的 PostgreSQL 触发器函数
PostgreSQL trigger function using "case when" and "else"
我做了一个更新触发器的代码。每当我更新时,如果“价格”为空,我想用 1000 填充 table“new_book”的“价格”列,如果“价格”不为空,则为 5% 的折扣。我的 postsql 代码是
create function test()
returns trigger
as
$$
declare pr1 numeric ;
begin
case when old.price is null then pr1=1000
else pr1=pr1*0.95 end
end;
return new;
end
$$
language plpgsql;
但是如果我 运行 这段代码,PGAdmin 会显示这样的错误
ERROR: syntax error at or near "else"
LINE 8: else pr1=pr1*0.95 end
^
SQL state: 42601
Character: 117
我该如何解决这个问题?
你想要一个 IF
语句。如果要更改 table 中存储的值,则需要修改 new
记录:
create function test()
returns trigger
as
$$
begin
if new.price is null then
new.new_book := 1000;
else
new.new_book := new.price * 0.95
end if;
return new;
end
$$
language plpgsql;
为了使分配真正持久化,您必须使用 BEFORE
触发器:
create trigger set_new_book_trigger
<b>before</b> insert or update on the_table
for each row
execute procedure test();
我做了一个更新触发器的代码。每当我更新时,如果“价格”为空,我想用 1000 填充 table“new_book”的“价格”列,如果“价格”不为空,则为 5% 的折扣。我的 postsql 代码是
create function test()
returns trigger
as
$$
declare pr1 numeric ;
begin
case when old.price is null then pr1=1000
else pr1=pr1*0.95 end
end;
return new;
end
$$
language plpgsql;
但是如果我 运行 这段代码,PGAdmin 会显示这样的错误
ERROR: syntax error at or near "else"
LINE 8: else pr1=pr1*0.95 end
^
SQL state: 42601
Character: 117
我该如何解决这个问题?
你想要一个 IF
语句。如果要更改 table 中存储的值,则需要修改 new
记录:
create function test()
returns trigger
as
$$
begin
if new.price is null then
new.new_book := 1000;
else
new.new_book := new.price * 0.95
end if;
return new;
end
$$
language plpgsql;
为了使分配真正持久化,您必须使用 BEFORE
触发器:
create trigger set_new_book_trigger
<b>before</b> insert or update on the_table
for each row
execute procedure test();