gpt4 book ai didi

postgresql - 错误 : column "exists" does not exist in SQL insert command

转载 作者:行者123 更新时间:2023-11-29 12:40:28 26 4
gpt4 key购买 nike

我想稍微了解一下触发器,我想创建一个触发器来检查我是否在我的预测表中添加了由(城市、事件类型、伤亡)组成的新行

如果我的新行伤亡人数高于城市人口,我会得到一个错误,新行不会插入到我的预测表中

到目前为止,这是我的代码

创建我的触发器

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

我的城市表

my City Table

我的预测表

my prediction table

希望您能帮助我理解错误并解决我的问题

最佳答案

使用FOUND:IF FOUND THEN

如果您的查询有任何结果,FOUND 将为 TRUE,否则为 FALSE。

EXISTS 根据查询是否返回任何结果接受返回 TRUE 或 FALSE 的查询,例如IF EXISTS(SELECT 1 FROM table WHERE 条件)THEN...

所以主要区别在于 FOUND 是一个变量,它在您的查询/语句返回后设置,并设置为 TRUE/FALSE,具体取决于您的 SELECT 语句是否返回任何结果,或者您的 UPDATE/DELETE 语句影响任何行。

另一方面,

EXISTS 是一个运算符,它根据您在那个时间点提供给它的查询返回 TRUE/FALSE。

关于postgresql - 错误 : column "exists" does not exist in SQL insert command,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com