gpt4 book ai didi

postgresql - 将参数传递给触发器函数

转载 作者:行者123 更新时间:2023-11-29 14:27:58 24 4
gpt4 key购买 nike

我不知道如何将参数传递给触发器函数。

我查看了文档,发现触发器函数不接受以通常的方式传递参数,但找不到使用的 pl-sql 触发器函数的示例函数中的原始行数据。

我的例子:

CREATE TABLE emp (
id serial,
empname text,
salary integer,
last_date timestamp,
last_user text
);



CREATE FUNCTION emp_stamp() RETURNS trigger AS '
BEGIN
-- Check that empname and salary are given
IF NEW.empname IS NULL THEN
RAISE EXCEPTION ''empname cannot be null'';
END IF;
IF NEW.salary IS NULL THEN
RAISE EXCEPTION ''% cannot have null salary'', NEW.empname;
END IF;



-- Who works for us when she must pay for it?
IF NEW.salary < 0 THEN
RAISE EXCEPTION ''% cannot have a negative salary'', NEW.empname;
END IF;



-- Remember who changed the payroll when
NEW.last_date := ''now'';
NEW.last_user := current_user;
RETURN NEW;
END;
' LANGUAGE plpgsql;



CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
FOR EACH ROW EXECUTE PROCEDURE emp_stamp();

最佳答案

如文档所述,NEWOLD 在行级触发器中定义并包含受影响的表行(对于 INSERTUPDATE 触发器)和之前(对于 UPDATEINSERT 触发器)数据修改。

您不必将它们传递给触发器函数,它们是自动定义的。

BEFORE 触发器中,您可以简单地修改 NEW 以更改新行(您不会 >BEFORE 触发器)。

要获取触发器中的原始行,只需使用 OLD 中的值即可。

关于postgresql - 将参数传递给触发器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55689479/

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