gpt4 book ai didi

postgresql - 如果已在目标表中检测到 n 个重复值,如何在插入时抛出 SQL 错误

转载 作者:行者123 更新时间:2023-11-29 13:08:25 25 4
gpt4 key购买 nike

我有一个包含两列的交叉表,培训计划和类(class)。我的老板要求我构建它,以便阻止人们向培训计划中添加超过 50 门类(class)。

我想我应该用触发器来做这件事。

我试着跟着这个... Postgres insert or update trigger WHEN condition (old)

CREATE OR REPLACE FUNCTION fn_count_tracks_per_map()
RETURNS TRIGGER AS
$BODY$
BEGIN
DECLARE
val INTEGER;
BEGIN
SELECT COUNT(*) INTO val FROM ntnx_track_in_map m WHERE m.map_id = new.map_id;
IF val > 49
THEN
RAISE EXCEPTION 'INSERT failed, maximum tracks in map reached'
END IF;
RETURN new;
END
$BODY$
LANGUAGE plpgsql VOLATILE

我得到的错误是——我已经尝试了一些语法方面的事情,但它还没有帮助,添加和删除;主要是image of failure

最佳答案

您的代码存在问题:

  • RAISE EXCEPTION 语句必须以分号结束
  • 有两个BEGIN,而应该只有一个,在变量声明之后

代码:

CREATE OR REPLACE FUNCTION fn_count_tracks_per_map()
RETURNS TRIGGER AS
$BODY$
DECLARE val INTEGER;
BEGIN
SELECT COUNT(*) INTO val FROM ntnx_track_in_map m WHERE m.map_id = new.map_id;
IF val > 49 THEN
RAISE EXCEPTION 'INSERT failed, maximum tracks in map reached';
END IF;
RETURN new;
END
$BODY$
LANGUAGE plpgsql VOLATILE;

Demo on DB Fiddle

关于postgresql - 如果已在目标表中检测到 n 个重复值,如何在插入时抛出 SQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58210546/

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