加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Postgresql触发函数带参数

发布时间:2020-12-13 16:37:06 所属栏目:百科 来源:网络整理
导读:我想在一个名为takegresql的表上创建一个触发器来更新另一个称为student的表中的值 我试图通过以下方式做到这一点。但是我收到一个错误,在“OLD”附近有语法错误。我不明白这是什么问题。这是我的代码: CREATE OR REPLACE FUNCTION upd8_cred_func (id1 VA
我想在一个名为takegresql的表上创建一个触发器来更新另一个称为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 [](文本值数组)可用于触发器。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读