我想在名为的表上创建触发器,并在PostgreSQL中使用来更新另一个名为的表中的值,学生
我正在尝试通过以下方式进行操作。但是我收到一个错误,提示“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:
关于传递给触发过程的记录,请参阅http://www.postgresql.org/docs/9.1/interactive/plpgsql-trigger.html:
正如 SeldomNeedy 在下面的注释中指出的那样,您仍然可以将参数传递并使用到触发函数。您将函数声明为不带任何参数,但是在定义触发器时(通过CREATE TRIGGER
),可以添加一些参数。
它们将以TG_NARG
(此类参数的数量)和TG_ARGV[]
(文本值的数组)的形式提供给触发器。
关于sql - 带有参数的Postgresql触发函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7726237/