【发布时间】:2021-01-28 05:41:14
【问题描述】:
我有一个插入或更新前触发器,它应该验证插入/更新数据中两列的值,如果数据无效或 - 如果有效 - 将值添加到插入中的其他两列,则引发异常/更新。
但是,当我使用无效数据进行测试时,我得到“错误:查询没有结果数据的目的地。提示:如果您想丢弃 SELECT 的结果,请改用用户执行。上下文:PL/pgSQL 函数 before_insert_update() SQL 语句的第 3 行。”
我曾尝试阅读 PostgreSQL 文档并在 Google 上搜索解释,但我只需要管理一下,我对 SQL 的理解不足以使其正常工作。
我的功能是
CREATE or replace FUNCTION before_insert_update()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
begin
select * from addresses
where addresses.roadname = NEW.roadname and
addresses.housenumber = NEW.housenumber;
if @@ROWCOUNT > 0 then
begin
select addresses.roadcode,
addresses.geom
into NEW.roadcode, NEW.geom
from addresses
where addresses.roadname = NEW.roadname and
addresses.housenumber = NEW.housenumber;
return NEW;
end;
else
declare _adresse text;
begin
_address := concat(NEW.roadname, ' ', NEW.housenumber);
raise exception 'The address does not exist: %', _address
using hint = 'Check the address here: https://danmarksadresser.dk/adresser-i-danmark/';
end;
end if;
END
$BODY$;
触发器非常简单
BEFORE INSERT OR UPDATE
ON table
FOR EACH ROW
EXECUTE PROCEDURE before_insert_update();
我做错了什么?
【问题讨论】:
-
将您的第一个
select替换为perform并可能使用if FOUND。 -
该函数一开始不会编译
-
编译时没有错误
标签: postgresql function plpgsql