gpt4 book ai didi

sql - 带参数的 Postgresql 触发器函数

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

我想在 postgresql 中的一个名为 takes 的表上创建一个触发器,以更新另一个名为 student 的表中的值我正在尝试通过以下方式进行。但是我收到一个错误,提示“OLD”附近存在语法错误。我不明白这有什么问题。这是我的代码:

CREATE OR REPLACE FUNCTION upd8_cred_func
(id1 VARCHAR, gr1 VARCHAR,id2 VARCHAR, gr2 VARCHAR)
RETURNS void AS $$
BEGIN
IF (id1=id2 and gr1 is null and gr2 is not null) THEN
update student set tot_cred = tot_cred + 6 where id = id1;
END IF;
RETURN;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER upd8_cred
AFTER UPDATE ON takes
FOR EACH ROW
EXECUTE PROCEDURE upd8_cred_func(OLD.id,OLD.grade,NEW.id,NEW.grade);

最佳答案

您不需要将 NEW 和 OLD 作为参数传递给触发器函数。它们自动在那里可用:

http://www.postgresql.org/docs/9.1/interactive/trigger-definition.html :

The trigger function must be declared as a function taking no arguments and returning type trigger. (The trigger function receives its input through a specially-passed TriggerData structure, not in the form of ordinary function arguments.)

关于传递给触发程序的记录,请参阅http://www.postgresql.org/docs/9.1/interactive/plpgsql-trigger.html :

When a PL/pgSQL function is called as a trigger, several special variables are created automatically in the top-level block. They are: [...] NEW, [...] OLD [...]

正如 SeldomNeedy 在下面的评论中指出的那样,您仍然可以向触发器函数传递和使用参数。您声明该函数不带参数,但是当定义触发器(通过CREATE TRIGGER)时,您可以添加一些参数。

它们将作为 TG_NARG(此类参数的数量)和 TG_ARGV[](文本 数组)用于触发器值(value)观)。

关于sql - 带参数的 Postgresql 触发器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7726237/

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