我试图通过以下方式做到这一点。但是我收到一个错误,在“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 [](文本值数组)可用于触发器。
总结以上是内存溢出为你收集整理的Postgresql触发函数带参数全部内容,希望文章能够帮你解决Postgresql触发函数带参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)