我想稍微了解一下触发器,我想创建一个触发器,以检查是否将即时通讯记录添加到由(city,eventype,casualties)组成的预测表中
如果我的新行伤亡人数高于城市人口,我将收到错误消息,并且新行不会插入我的预测表中
到目前为止,这是我的代码
创建我的触发器
create trigger T1
before insert on prediction
for each row
execute procedure trigf1();
创建trigf1();
create or replace function trigf1() returns trigger as $$
declare bad_population record;
Begin
select city.cname INTO bad_population
from city
where new.casualties>city.population and new.cname=city.cname;
if exists bad_population then begin
raise notice 'bad population-more casualites than city population';
return null;
end;
else
return new;
end if;
end;
$$language plpgsql;
在尝试输入这些值时出现错误
insert into prediction values ('Naples', 'Volcano', 3056)
这是错误
ERROR: column "exists" does not exist
LINE 1: SELECT exists bad_population
^
QUERY: SELECT exists bad_population
CONTEXT: PL/pgSQL function trigf1() line 7 at IF
SQL state: 42703
我的城市表
我的预测表
希望您能帮助您理解错误并解决我的问题
答案 0 :(得分:3)
使用FOUND
:IF FOUND THEN
。
如果查询有任何结果,则FOUND
将为TRUE,否则为FALSE。
EXISTS
接受一个查询,该查询返回TRUE或FALSE,具体取决于该查询是否返回任何结果,例如IF EXISTS (SELECT 1 FROM table WHERE condition) THEN...
因此,主要区别是FOUND
是在查询/语句返回后设置的变量,并且根据您的SELECT语句是否返回任何结果或受影响的UPDATE / DELETE语句将其设置为TRUE / FALSE任何行。
EXISTS
是一个运算符,它会根据您当时提供给它的查询返回TRUE / FALSE。