gpt4 book ai didi

sql - 在 PostgreSQL 上插入或更新之前检查给定值的触发器

转载 作者:行者123 更新时间:2023-11-29 11:40:39 26 4
gpt4 key购买 nike

我必须创建一个触发器来更新包含产品的数据库。产品有到期日期,在插入或更新产品之前,我必须检查到期日期是否优于当前时间戳。如果是这样,我必须定期进行插入/更新(这是我遇到的问题)。如果不是,我只是简单地忽略它。

这是我编写的代码。

CREATE FUNCTION product_expiration_date()
RETURNS trigger AS $BODY$

BEGIN
IF new.expirationDate > CURRENT_TIMESTAMP THEN
INSERT INTO Product VALUES (new).*;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE 'plpgsql';

CREATE TRIGGER verify_expiration_date BEFORE INSERT OR UPDATE ON Product
FOR EACH ROW EXECUTE PROCEDURE product_expiration_date();

最佳答案

当满足检查条件并且您希望发生 INSERT/UPDATE 时,您的触发器函数应返回 NEW,否则返回 NULL 以跳过操作,或者更好,引发带有特定错误消息的异常。

它不能自行执行它所调用的 INSERT,这将由 SQL 引擎使用 NEW 中的值来完成。

跳过操作的代码:

IF new.expirationDate > CURRENT_TIMESTAMP THEN
RETURN NEW;
ELSE
RETURN NULL;
END IF;

或者有一个异常(exception):

IF new.expirationDate > CURRENT_TIMESTAMP THEN
RETURN NEW;
ELSE
RAISE EXCEPTION 'Invalid expiration date';
END IF;

参见 Overview of Trigger Behavior在文档中获取更多信息。

关于sql - 在 PostgreSQL 上插入或更新之前检查给定值的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746741/

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