首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从触发器函数中排除更新的记录

从触发器函数中排除更新的记录
EN

Stack Overflow用户
提问于 2019-08-17 08:23:44
回答 1查看 109关注 0票数 0

我有一个表,其中有一个名为priority的列。我创建了一个在更新后触发的触发器函数。我希望该函数更改其余行的优先级列的值。例如,我有10行,每行都有一个从1到10的值,然后我想要将第10行的优先级更改为1,然后将其余行的优先级加1。

我试图以多种方式更改查询,并在函数中添加更多/更少的逻辑,但我被卡住了。

代码语言:javascript
运行
复制
CREATE FUNCTION reorder_priority() RETURNS TRIGGER AS $$
BEGIN
    CASE TG_OP
        WHEN 'UPDATE' THEN
            UPDATE
                link
            SET
                priority = priority + 1
            WHERE
                link.priority >= NEW.priority AND
                NOT link.priority > OLD.priority;
    END CASE;

    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

这个函数能够做到这一点,但它似乎触发了两次,每一行再加1,剩下10行,但优先级在2-11之间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-17 08:55:22

我想通了..。

只需更改比较以排除更新OLD.priority的值,返回NEW,并将触发器更改为在之前运行而不是在之后运行

代码语言:javascript
运行
复制
BEGIN
    CASE TG_OP
        WHEN 'UPDATE' THEN
            UPDATE
                link
            SET
                priority = priority + 1
            WHERE
                link.priority >= NEW.priority AND
                NOT link.priority >= OLD.priority;
    END CASE;

    RETURN NEW;
END;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57532400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档