【问题标题】:Reach parameters in trigger function postgreSQL达到触发函数postgreSQL中的参数
【发布时间】:2020-07-28 11:28:52
【问题描述】:

我正在尝试在插入之前编写触发器以检查参数是否符合要求。我尝试了很多东西,如果我对 d 和 e 的值进行硬编码,它会按预期工作,并在 e!=d 的情况下引发错误。但是当我用 NEW 变量替换它时它不起作用。带有触发器的表具有列 id 和 languagetag_id。 你能告诉我我做错了什么吗?

CREATE or replace FUNCTION insert_name() RETURNS trigger AS $insert_name$
declare d int;
declare e int;
    begin  
        d = (select distinct languagetagid from "scheme".table1 as a
                                    left join "scheme".table2 as b on (a.id = b.country_id )
                                    where b.id = NEW.id);
        e = NEW.languagetag_id;                     
    IF ( e != d ) THEN
                RAISE EXCEPTION 'error: % ', e;
    END IF;
    RETURN NULL;
    END;
$insert_name$ LANGUAGE plpgsql;


CREATE TRIGGER insert_name BEFORE INSERT or UPDATE ON "scheme".table
    EXECUTE PROCEDURE insert_name();

【问题讨论】:

标签: sql postgresql


【解决方案1】:

要访问NEWOLD 值,必须对每一行而不是整个语句执行触发器

CREATE TRIGGER insert_name BEFORE INSERT or UPDATE ON "scheme".table
     FOR EACH ROW EXECUTE PROCEDURE insert_name();

【讨论】:

  • 谢谢。我没想到触发器会出错,只是在功能上。现在可以了。
猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多