我想在名为的表上创建触发器,并在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/

10-09 06:47
查看更多