【发布时间】:2023-03-30 00:43:02
【问题描述】:
我想编写一个 Postgres SQL 触发器,它基本上会发现一个数字是否在列中出现 5 次或更多次。如果它出现第五次,我想抛出一个异常。以下是表格的外观:
create table tab(
first integer not null constraint pk_part_id primary key,
second integer constraint fk_super_part_id references bom,
price integer);
insert into tab values(1,NULL,100), (2,1,50), (3,1,30), (4,2,20), (5,2,10), (6,3,20);
以上是表格中的原始插入。我的触发器将在向表中插入更多值时发生。
基本上,如果一个数字在插入表格后出现在“第二”列中超过 4 次,我想引发异常。这是我编写触发器的尝试:
create function check() return trigger as '
begin
if(select first, second, price
from tab
where second in (
select second from tab
group by second
having count(second) > 4)
) then
raise exception ''Error, there are more than 5 parts.'';
end if;
return null;
end
'language plpgsql;
create trigger check
after insert or update on tab
for each row execute procedure check();
谁能帮帮我?如果是这样那就太好了!谢谢!
【问题讨论】:
-
你为什么要这个?你想解决什么问题?
-
这听起来像是应该在前端,在数据库之外处理的业务逻辑。
-
只是为了了解 SQL 触发器。我想实现自己的。
标签: sql postgresql triggers plpgsql