postgresql - 错误:SQL 插入命令中不存在列“exists”
问题描述
我正在尝试了解一下触发器,我想制作一个触发器来检查我是否将新行添加到由(城市,偶数类型,伤亡)组成的预测表中
如果我的新行伤亡人数高于城市人口,我将得到一个错误,并且新行不会插入到我的预测表中
到目前为止,这是我的代码
创建我的触发器
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
我的城市表
我的预测表
希望您能帮助理解错误并解决我的问题
解决方案
使用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。
推荐阅读
- css - 为什么在白色背景上更改 alpha 会产生与混合白色不同的结果?
- angular - 在同一个域名上托管 2 个 SPA 的正确方法是什么?
- php - 按列值对数据行进行分组并重组为关联多维数组
- php - 在 WP_Query 中获取 WooCommerce 订阅产品类型和特定类别
- mysql - 如何从 mysql db 引擎获取 mariadb 兼容的数据库?
- json - 来自 VB.net 类的 Json
- angular - 可以上传图像并自动适应pdf中特定框的大小吗?
- kubernetes - 集群内无法访问 ClusterIP
- function - 在 OnClickListener 中,如何使用不同的参数多次调用函数。前一个完成后要运行的功能
- swift - SwiftUI 在元素外点击时关闭(或绝对定位)